Группа SQL по дате (час)

У меня есть таблица с столбцом "Дата". Я хочу сгруппировать по часам на определенную дату.

Ответы

Ответ 1

Select TO_CHAR(date,'HH24')
from table
where date = TO_DATE('20110224', 'YYYYMMDD')
group by TO_CHAR(date,'HH24')

Ответ 2

Вы также можете сделать это:

SELECT TRUNC(datecol, 'HH24') FROM mytable
GROUP BY TRUNC(datecol, 'HH24');

Ответ 3

select to_char(datecol,'HH24') thehour, count(*) count_in_hour
from tbl
where datecol = date '20110224'
group by to_char(datecol,'HH24')
order by thehour asc

Ответ 4

В качестве альтернативы я бы предложил EXTRACT (datetime), но (empahsis mine):

Если запрашивается HOUR, MINUTE или SECOND, тогда expr должен оценивать выражение типа данных TIMESTAMP, TIMESTAMP с временной зоной, TIMESTAMP С ЛОКАЛЬНОЙ ЗЕМНОЙ ЗОНЕЙ, или ИНТЕРВАЛ ДЕНЬ ВТОРОЙ. DATE недействительна здесь, поскольку Oracle Database рассматривает его как тип данных ANSI DATE, который не имеет временных полей.

Следовательно, результат немного уродлив:

  SELECT EXTRACT (HOUR FROM CAST (m.a_date AS TIMESTAMP)) AS hour_,
         COUNT (*) AS count_
    FROM MY_TABLE m
GROUP BY EXTRACT (HOUR FROM CAST (m.a_date AS TIMESTAMP));