分组/聚合超过日期范围

时间:2009-06-18 21:02:54

标签: sql oracle

用一列获得表ABC。日期列“已创建”。所以样本值就像;

 created
 2009-06-18 13:56:00
 2009-06-18 12:56:00
 2009-06-17 14:02:00
 2009-06-17 13:12:23
 2009-06-16 10:02:10

我想写一个查询,结果是:

count    created
2        2009-06-18
2        2009-06-17
1        2009-06-16

基本上计算每个日期属于多少条目,但忽略时间。

这是在Oracle的PL-SQL中。

有什么想法吗?

3 个答案:

答案 0 :(得分:11)

TRUNC函数返回DATETIME的DATE。

select trunc(created),count(*) from ABC group by trunc(created)

答案 1 :(得分:2)

select count(*), to_char('YYYY-MM-DD', created) from ABC group by to_char('YYYY-MM-DD', created)

答案 2 :(得分:2)

为了完整起见,我将添加一个适用于任意定义的存储桶大小的通用变体:

  SELECT trunc( (created - to_date('2000.01.01', 'YYYY.MM.DD'))
                * 24
              ) / 24
         + to_date('2000.01.01', 'YYYY.MM.DD') theDate
       , count(*)
    FROM Layer
GROUP BY trunc( (created - to_date('2000.01.01', 'YYYY.MM.DD'))
                * 24
              ) / 24
         + to_date('2000.01.01', 'YYYY.MM.DD')
ORDER BY 1;

上面的查询将按小时计算;使用小于24的东西来获得更大的间隔,或者更大以创建更小的间隔。通过反转*和/的位置,你可以让你的桶以天为单位增加(例如,做“/ 7”而不是“* 24”会给你一桶一周。