sql >> Databasteknik >  >> Database Tools >> SSMS

TSQL Query returnerar värden för varje timme under de senaste 24 timmarna

Ditt problem verkar vara att tidsspannet måste delas upp i timmar. Så du måste börja med alla timmar på dygnet. Sedan beräknar du överlappningen, summerar skillnaderna (nedan i millisekunder) och konverterar tillbaka allt till en tid för utdata.

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

För att få det här att fungera måste du också linda "börja" och "sluta" med dubbla citattecken eller hakparenteser. Dessa är reserverade ord i T-SQL. Och du måste byta ut "..." med ytterligare linjer i timmar från 3 till 22.



  1. komma till phpmyadmin med mamp

  2. Hur exporterar man tabell till Excel från mysql-databas?

  3. Fatalt fel:Uncaught ArgumentCountError:För få argument för att fungera Admincategory::deletecategory(),

  4. #1146 - Tabell 'phpmyadmin.pma__tracking' finns inte