2017-01-24 3 views
2

Используя принятый ответ, найденный в этом сообщении Count rows per hour in SQL Server with full date-time value as result Я могу получить количество записей по часам, однако я хотел бы сделать так, чтобы день не имел значения ,T-SQL Получить строки в час Независимо от дня

Как я могу получить количество записей по часам дня, независимо от того, в какой день запись?

Например, в следующей таблице:

+----------+-------------------------+ 
| instance |  datetime   | 
+----------+-------------------------+ 
| A  | 2017-01-10 11:01:05.267 | 
| B  | 2017-01-13 11:07:05.783 | 
| C  | 2017-01-14 11:37:05.593 | 
| D  | 2017-01-17 11:37:38.610 | 
| E  | 2017-01-17 11:47:04.877 | 
| F  | 2017-01-15 12:14:34.127 | 
| G  | 2017-01-17 12:15:09.373 | 
| H  | 2017-01-09 13:58:06.013 | 
+----------+-------------------------+ 

приведет ли в следующем наборе:

+-------------+-------------+ 
| recordCount | timeStamp | 
+-------------+-------------+ 
|   5 | 11:00:00.00 | 
|   2 | 12:00:00.00 | 
|   1 | 13:00:00.00 | 
+-------------+-------------+ 
+0

Какая версия SQL-сервера вы используете? –

+0

Почему бы не удалить дату из столбцов datetime, установив ее для 1900-01-01 для всех строк? Тогда вы получите ожидаемый результат. – dadde

+0

@Prdp SQL Server 11 –

ответ

6

Вы можете использовать DATEPART:

SELECT DATEPART(HOUR, [datetime]), COUNT(*) 
FROM mytable 
GROUP BY DATEPART(HOUR, [datetime]) 

Функция возвращает целое число, по существу извлекая значение часа из поля DATETIME.

+0

Отлично, спасибо! –

1

Если вы используете SQL SERVER 2012 или выше, то используйте FORMAT

SELECT Count(1) AS Recordcount, 
     Format([datetime], 'HH:00:00') 
FROM yourtable 
GROUP BY Format([datetime], 'HH:00:00') 

или CONCATDATEPART и

SELECT Concat(Datepart(HOUR, [datetime]), ':00:00'), 
     Count(*) 
FROM Yourtable 
GROUP BY Datepart(HOUR, [datetime]) 
Смежные вопросы