как получить информацию за 30 дней подряд? - PullRequest
0 голосов
/ 12 июня 2019

Я использую 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

Если сервер имеет состояние False в течение 30 дней подряд, тогда я добавляю столбец, в котором Alive имеет 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 неактивен, поскольку его состояние равно False через 3 дня подряд.

Как получить эти выходные данные в течение 30 дней подряд?

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Проверьте это. Обратите внимание, что 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
0 голосов
/ 12 июня 2019

Попробуйте, это может помочь разобраться

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...