Sql server 如何连续30天获取信息?

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

我正在使用Microsoft SQL Server,我有3列:

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吗?