用一列获得表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中。
有什么想法吗?
答案 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”会给你一桶一周。