我正在尝试获取每小时创建的记录数,但是在将结果正确分组时遇到了麻烦。这个想法类似于: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表达式。
提前致谢!
答案 0 :(得分:2)
使用汇总时,select
和order 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')