Oracle Count 每小时的记录数

Oracle Count number of records each hour

我正在尝试获取每小时创建的记录数,但 运行 无法正确分组结果。这个想法类似于:How to count number of records per day?

但是,我用来分组的字段是一个日期时间字段,可以记录到秒。这似乎导致了 Group By 语句的问题,因为当查询 returns 时,在指定的时间段内每秒有一行,这是太多的数据并且会做我想做的工作结果比需要的更难(如果没有其他原因,它的行太多而不能放在一个 Excel sheet)。

我当前的代码是:

SELECT ASD, Count(ASD) Num_CR
From DB_Name.Table_Name fcr
Where trunc(fcr.ASD) > to_Char('31-DEC-2014')
    And trunc(fcr.ASD) < to_Char('31-JAN-2015')
    And fcr.Status_Code = 'C'
Group By ASD
Order By ASD;

我尝试将分组依据更改为 trunc(ASD),但这会导致 Toad 抛出此错误:ORA-00979:不是分组依据表达式。

提前致谢!

SELECT to_char(ASD,'DD-MM-YYYY HH'), Count(ASD) Num_CR
From DB_Name.Table_Name fcr
Where trunc(fcr.ASD) > to_Char('31-DEC-2014')
    And trunc(fcr.ASD) < to_Char('31-JAN-2015')
    And fcr.Status_Code = 'C'
Group By to_char(ASD,'DD-MM-YYYY HH')
Order By to_char(ASD,'DD-MM-YYYY HH');

又快又脏:)

当您使用聚合时,selectorder by 子句中的任何内容都必须与 group by clause:

中的内容相匹配
SELECT trunc(ASD,'hh'), Count(ASD) Num_CR
From DB_Name.Table_Name fcr
Where trunc(fcr.ASD) > to_date('31-DEC-2014')
    And trunc(fcr.ASD) < to_date('31-JAN-2015')
    And fcr.Status_Code = 'C'
Group By trunc(ASD,'hh')
Order By trunc(ASD,'hh');

应用于日期时,trunc 将截断到日期。要截断到不同的级别,请将要截断的元素的格式指定为第二个参数(例如,'hh' 将截断到小时;'mm' 将截断到月)。

首先,为什么要对已经是字符串的内容执行 to_char?其次,您为什么要将(可能)是 DATE 列的内容与字符串进行比较?那就是疯狂......

我想你在寻找类似的东西:

SELECT   trunc(ASD, 'hh') asd_hr, Count(ASD) Num_CR
From     DB_Name.Table_Name fcr
Where    trunc(fcr.ASD) > to_date('31/12/2014', 'dd/mm/yyyy')
And      trunc(fcr.ASD) < to_date('31/01/2015', 'dd/mm/yyyy')
And      fcr.Status_Code = 'C'
Group By trunc(ASD, 'hh')
Order By trunc(ASD, 'hh');

同样值得注意的是,您的意思是要从查询中排除一月的最后一天吗?如果是这样,那很好,但如果不是,那么也许您应该将其更改为 to_date('01/02/2015', 'dd/mm/yyyy')