SSMS
 sql >> Baza danych >  >> Database Tools >> SSMS

TSQL Query zwraca wartości dla każdej godziny z ostatnich 24 godzin

Twój problem wydaje się polegać na tym, że przedział czasu musi być rozłożony w godzinach. Musisz więc zacząć od wszystkich godzin w ciągu dnia. Następnie obliczasz nakładanie się, sumujesz różnice (poniżej w milisekundach) i konwertujesz wszystko z powrotem na czas dla wyjścia.

with const as (
        select dateadd(hour, 1, cast(cast(getdate() -1 as date) as datetime)) as midnight            
    ),
    allhours as (
        select 0 as hour, midnight as timestart, dateadd(hour, 1, midnight) as timeend from const union all
        select 1 as hour, dateadd(hour, 1, midnight), dateadd(hour, 2, midnight) from const union all
        select 2 as hour, dateadd(hour, 2, midnight), dateadd(hour, 3, midnight)  from const union all
        . . .
        select 23 as hour, dateadd(hour, 23, midnight), dateadd(hour, 24, midnight) from const
    )
select ah.hour,
       sum(datediff(ms, (case when ah.timestart >= dt.begin then timestart else dt.begin end),
                        (case when ah.timeend <= dt.end then ah.timeend else dt.end end)
                   ) 
           ) as totalms,
       cast(dateadd(ms, sum(datediff(ms, (case when ah.timestart >= dt.begin then timestart else dt.begin end),
                                     (case when ah.timeend <= dt.end then ah.timeend else dt.end end)
                                    )
                           ),
                     0) as time
           ) as totalTime
from allhours ah left outer join
     DeviceTable dt
     on ah.timestart< coalesce(dt.end, getdate()) and
        ah.timeend >= dt.begin
group by ah.hour
order by ah.hour

Ponadto, aby to zadziałało, musisz umieścić „początek” i „koniec” w podwójnych cudzysłowach lub nawiasach kwadratowych. Są to słowa zastrzeżone w T-SQL. I musisz wymienić „…”. z dodatkowymi liniami na godziny od 3 do 22.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Wykrywanie nieużywanych zmiennych w SQL Server

  2. Co to jest tryb SQLCMD w programie SQL Server Management Studio?

  3. SQL:Jak sortować wartości w kategorie w ssms

  4. Skryptuj wszystkie widoki/funkcje/procedury w bazie danych Sql Server w kolejności zależności

  5. Gdzie mogę sprawdzić typ tabeli definiowanej przez użytkownika w programie SQL Server 2008 w programie SSMS? i jak wstawić do niego nową kolumnę?