所有DTM值的每小时SQL计数

所有DTM值的每小时SQL计数,sql,oracle,Sql,Oracle,我有一个具有Oracle DTM格式的现有值范围,例如2018年11月22日12.20.45.430838000 我的目标是在整个数值范围内每小时进行一次计数。我要计算不同日期的所有唯一值 事实证明,这很困难,因为extract函数只能从字段中提取1个日期类型,我需要多个值 我能够编写下面的查询,它给出了整个范围内每天的计数 select trunc(created_dtm), count(*) CreatedCount from (select ord.order_id, ordser.se

我有一个具有Oracle DTM格式的现有值范围,例如2018年11月22日12.20.45.430838000

我的目标是在整个数值范围内每小时进行一次计数。我要计算不同日期的所有唯一值

事实证明,这很困难,因为extract函数只能从字段中提取1个日期类型,我需要多个值

我能够编写下面的查询,它给出了整个范围内每天的计数

select trunc(created_dtm), count(*) CreatedCount from

(select ord.order_id, ordser.service_id, ord.product_type, ord.created_dtm ,ord.last_modified_dtm from SCADRON_OWNER.orders ord, SCADRON_OWNER.order_subtype os, SCADRON_OWNER.order_services ordser where ord.order_id = os.order_id and ordser.order_id = ord.order_id and os.subtype = 'FttcActiveLineTakeoverUpgrade' and ord.order_status
= 'Completed' )

group by trunc(created_dtm) order by trunc(created_dtm);
产生这样的结果:

但是,我想对其进行细化,以便计算每小时的所有值,有没有简单的方法可以做到这一点?

我想您需要:

select cast(trunc(created_dtm, 'hh') as timestamp),
       count(*)
from SCADRON_OWNER.orders ord join
     SCADRON_OWNER.order_subtype os
     on ord.order_id = os.order_id join
     SCADRON_OWNER.order_services ordser 
     on ordser.order_id = ord.order_id 
where os.subtype = 'FttcActiveLineTakeoverUpgrade' and 
      ord.order_status = 'Completed' 
group by cast(trunc(created_dtm, 'hh') as timestamp)
order by min(created_dtm);
这会将值转换为时间戳,以便您可以看到它。或者,转换为字符串:

select to_char(created_dtm, 'YYYY-MM-DD HH24') || ':00:00',
       count(*)
from SCADRON_OWNER.orders ord join
     SCADRON_OWNER.order_subtype os
     on ord.order_id = os.order_id join
     SCADRON_OWNER.order_services ordser 
     on ordser.order_id = ord.order_id 
where os.subtype = 'FttcActiveLineTakeoverUpgrade' and 
      ord.order_status = 'Completed' 
group by to_char(created_dtm, 'YYYY-MM-DD HH24')
order by min(created_dtm);

这在GordonLinoff非常有效。第二个查询有效,而第一个查询给出了一个错误“ORA-00979:非分组表达式”。