Sql server 如何连续30天获取信息?
我正在使用Microsoft SQL Server,我有3列:Sql server 如何连续30天获取信息?,sql-server,Sql Server,我正在使用Microsoft SQL Server,我有3列: Server State Date SRV1 True 2019-01-01 SRV2 False 2019-01-01 SRV3 False
Server State Date
SRV1 True 2019-01-01
SRV2 False 2019-01-01
SRV3 False 2019-01-01
SRV4 True 2019-01-01
SRV5 False 2019-01-01
SRV1 True 2019-01-02
SRV2 True 2019-01-02
SRV3 False 2019-01-02
SRV4 True 2019-01-02
SRV5 False 2019-01-02
SRV1 True 2019-01-03
SRV2 False 2019-01-03
SRV3 False 2019-01-03
SRV4 True 2019-01-03
SRV5 True 2019-01-03
如果服务器连续30天状态为False,则我添加一列Alive has No:
Server State Date Alive
SRV1 True 2019-01-01 Yes
SRV2 False 2019-01-01 Yes
SRV3 False 2019-01-01 No
SRV4 True 2019-01-01 Yes
SRV5 False 2019-01-01 Yes
SRV1 True 2019-01-02 Yes
SRV2 True 2019-01-02 Yes
SRV3 False 2019-01-02 No
SRV4 True 2019-01-02 Yes
SRV5 False 2019-01-02 Yes
SRV1 True 2019-01-03 Yes
SRV2 False 2019-01-03 Yes
SRV3 False 2019-01-03 No
SRV4 True 2019-01-03 Yes
SRV5 True 2019-01-03 Yes
这里只有SRV3是非活动的,因为它的状态连续3天为False
如何连续30天获得此输出?检查此项。请注意,30天是固定的,在查询中使用了两次。如果希望在不同的周期长度上应用相同的逻辑,则需要更改脚本中的两个静态数字
SELECT *,
CASE
WHEN (
SELECT COUNT(State)
FROM your_table B
WHERE B.State = 'False'
AND B.Server = A.Server
AND (B.Date BETWEEN DATEADD(DD,-30,A.Date) AND A.Date)
) =30 THEN 'No'
ELSE 'Yes'
END Alive
FROM your_table A
ORDER BY 1,3
试试这个,它可能有助于解决问题
Declare @Table Table
(
[Server] Varchar(30)
,[State] varchar(30)
,[Date] date
)
Declare @From_Date date='01jan19'
,@To_Date date='03jan19'
,@Count int
Set @Count=DATEDIFF(DAY,@From_Date,@To_Date)
Insert into @Table
(
[Server],[State],[Date]
)
Select 'SRV1','True','20190101'
union all
Select 'SRV1','True','20190102'
union all
Select 'SRV1','True','20190103'
union all
Select 'SRV2','True','20190101'
union all
Select 'SRV2','False','20190102'
union all
Select 'SRV2','True','20190103'
select [Server]
,cast(@From_Date as varchar(15))+' / '+cast(@To_Date as varchar(15)) DateInterval
, iif(sum(iif([State]='True',1,0))=@Count,'Yes','No') As Alive
from @Table
group by [Server]
这三天你是怎么做的?你不能用同样的逻辑来计算30吗?