SQL Server: количество строк в час - PullRequest
1 голос
/ 17 апреля 2019

У меня есть таблица с 2628 строками. Я хочу получить счет в час. У меня есть столбец completion_time, в котором указывается дата и время записи.

enter image description here

Я могу найти только один час.

select count(*) 
from billing b 
where b.completion_time >= '2019-04-16 23:50:23' 
  and b.completion_time <='2019-04-17 00:50:22'

Время до 9 часов. то есть процесс был запущен в 2016-04-16 23:50:23 и заканчивается 2019-04-17 08:16:49. Так что я хочу общее количество в час.

Обновление 1

Я хочу вывод, как показано ниже

enter image description here

Как мне этого добиться? Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

3 голосов
/ 17 апреля 2019

Попробуйте это:

select datepart(hour,b.completion_time) Hour, count(*) NumberOfRecords
from billing b
group by datepart(hour,b.completion_time)

Редактировать:

select  row_number() over (order by min(b.completion_time)) RowNumber, count(*) NumberOfRecords
from billing b
group by datepart(hour,b.completion_time)
order by min(b.completion_time)
0 голосов
/ 17 апреля 2019

попробуйте это.

    Declare @StartTime DATETIME = '2016-04-16 23:50:23'
    Declare @EndTime DateTime = '2019-04-17 08:16:49'

    Declare @Tab Table(id int, Completion_Time DateTime)

    Insert into @Tab
    SELECT 1, '2016-04-16 23:50:23' Union All
    SELECT 2,'2016-04-17 00:50:24' Union All
    SELECT 3,'2016-04-17 01:50:26' Union All
    SELECT 4,'2016-04-17 01:50:32' Union All
    SELECT 5,'2016-04-17 01:50:55' Union All
    SELECT 6,'2016-04-17 02:50:28' Union All
    SELECT 7,'2016-04-17 02:50:30' Union All
    SELECT 8,'2016-04-17 02:50:45' Union All
    SELECT 9,'2016-04-17 04:50:32' Union All
    SELECT 10,'2016-04-17 04:50:52' 

    --Select Id, DATEDIFF(HH,@StartTime,Completion_Time) Diff from @Tab

    ;with cte
    As
    (

        SELECT CONVERT(VARCHAR(5),DATEDIFF(HH,@StartTime,Completion_Time)+1) as [Hour] , COUNT(*) As [Records]
        From @Tab
        Group by DATEDIFF(HH,@StartTime,Completion_Time)+1
    )

    Select  [Hour] + CASE
                WHEN [Hour] % 100 IN (11,12,13) THEN 'th'
                WHEN [Hour] % 10 = 1 THEN 'st'
                WHEN [Hour] % 10 = 2 THEN 'nd'
                WHEN [Hour] % 10 = 3 THEN 'rd'
                ELSE 'th' 
            END + ' hour',
        Records
    from cte
0 голосов
/ 17 апреля 2019

Это будет делать то, что вам нужно:

 SELECT HOUR(b.completion_time) hourOfDay, COUNT(*) NumberOfRecords
 FROM billing b 
 GROUP BY hourOfDay

HOUR - это предопределенная функция для вычисления часа из DateTime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...