SSMS
 sql >> база данни >  >> Database Tools >> SSMS

TSQL Query връща стойности за всеки час за последните 24 часа

Проблемът ви изглежда е, че периодът от време трябва да бъде разделен на часове. Така че, трябва да започнете с всички часове на деня. След това изчислявате припокриването, сумирате разликите (по-долу в милисекунди) и преобразувате всичко обратно във време за изхода.

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

Освен това, за да работи това, трябва да увиете "начало" и "край" в двойни кавички или квадратни скоби. Това са запазени думи в T-SQL. И трябва да замените "..." с допълнителни линии за часове от 3 до 22.



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. SQL заявката с помощта на Entity Framework работи по-бавно, използва лош план за заявка

  2. Как да определим ефективните разрешения за потребител на база данни на SQL Server чрез C#?

  3. Актуализиране на sql битово поле в базата данни

  4. Защитете LocalDB от потребителски достъп

  5. Как да инсталирам SQL Server Management Studio 2012 (SSMS) Express?