Si vous voulez le the_date
champ comme une date réelle :
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
Si vous voulez que la valeur de l'heure soit un nombre, vous pouvez envelopper ce champ dans un to_number()
appel. S'il s'agit d'un affichage, vous devez également formater explicitement la date :
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
Ou avec un champ pour la date et l'heure ensemble :
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
Cela dépend de ce que vous voulez voir et de ce que vous allez en faire.
Quels que soient les champs que vous utilisez pour l'agrégation, vous devez les spécifier de la même manière dans le group by
clause - vous ne pouvez pas utiliser la notation positionnelle, par ex. group by 1, 2
. ET vous avez déjà réalisé que le between
les valeurs doivent être dans l'ordre croissant ou il ne trouvera rien du tout.