Oracle计数每小时的记录数

时间:2015-02-11 15:01:41

标签: sql oracle group-by

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

但是,我用于分组依据的字段是一个记录到第二个字段的日期时间字段。这似乎导致Group By语句出现问题,因为当查询返回时,在指定的时间段内每秒有一行,这是太多的数据并且会使我想要的结果更多的结果比它需要的困难(如果没有其他原因,它太多行不适合一张Excel表格)。

我目前的代码是:

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;

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

提前致谢!

3 个答案:

答案 0 :(得分:2)

使用汇总时,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'将截断为月份。< / p>

答案 1 :(得分:1)

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');

又快又脏:)

答案 2 :(得分:1)

首先,你为什么要对已经是字符串的东西做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');

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

相关问题