Jeśli chcesz the_date
pole jako aktualna data:
select trunc(date '1970-01-01' + datetimeorigination / (24*60*60)) as the_date,
to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
'HH24') as the_hour,
count(record_id)
from table_a
group by trunc(date '1970-01-01' + datetimeorigination / (24*60*60)),
to_char(date '1970-01-01' + datetimeorigination / (24*60*60), 'HH24');
THE_DATE THE_HOUR COUNT(RECORD_ID)
--------- -------- ----------------
24-SEP-13 14 1
20-SEP-13 18 1
Jeśli chcesz, aby wartość godziny była liczbą, możesz umieścić to pole w to_number()
połączenie. Jeśli to jest do wyświetlenia, powinieneś również wyraźnie sformatować datę:
select to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
'YYYY-MM-DD') as the_date,
to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
'HH24') as the_hour,
count(record_id)
from table_a
group by to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
'YYYY-MM-DD'),
to_char(date '1970-01-01' + datetimeorigination / (24*60*60), 'HH24');
THE_DATE THE_HOUR COUNT(RECORD_ID)
---------- -------- ----------------
2013-09-24 14 1
2013-09-20 18 1
Lub z jednym polem na datę i godzinę razem:
select to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
'YYYY-MM-DD HH24') as the_hour,
count(record_id)
from table_a
group by to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
'YYYY-MM-DD HH24');
THE_HOUR COUNT(RECORD_ID)
------------- ----------------
2013-09-24 14 1
2013-09-20 18 1
Zależy, co chcesz zobaczyć i co zamierzasz z tym zrobić.
Niezależnie od tego, których pól używasz do agregacji, musisz określić je w ten sam sposób w group by
klauzula - nie możesz używać notacji pozycyjnej, np. group by 1, 2
. I już zdałeś sobie sprawę, że between
wartości muszą być w porządku rosnącym, inaczej nic nie znajdzie.