规则
一小时之间的任何记录都应计为一个。
数据
ID DATE
1 06/07/2017 09:20:35
2 06/07/2017 10:20:35
3 06/07/2017 10:25:30
4 06/07/2017 10:40:35
5 06/07/2017 10:50:35
6 06/07/2017 11:25:30
7 06/07/2017 11:50:20
8 06/07/2017 15:25:30
9 06/07/2017 17:25:30
10 06/07/2017 17:30:30
11 06/07/2017 17:40:55
预期结果
count date
5 06/07/2017
为什么呢?根据最短日期,一小时后的记录计为一个。像这样:
count range_date
1 09:20:35 - 10:20:35
1 10:20:36 - 11:20:36
1 11:20:37 - 12:20:37
0 12:20:38 - 13:20:38
0 13:20:39 - 14:20:39
0 14:20:40 - 15:20:40
1 15:20:41 - 16:20:41
1 17:20:42 - 18:20:42
有任何建议吗? 由于我没有日期(最小/最大)规则,所以在一个标准中有一些东西。我只知道所有约会都在同一天。
我不想在每小时之间进行N次选择......
答案 0 :(得分:1)
如果我正确理解了您的问题,这是一个获得您正在寻找的结果的查询:
SELECT
TRUNC(dt) AS day,
COUNT(DISTINCT TRUNC(dt - 20 / (24 * 60) - (35 + TO_NUMBER(TO_CHAR(dt, 'HH24')) - 9) / (24 * 60 * 60), 'HH24')) AS hours
FROM yourtable
GROUP BY TRUNC(dt)
TRUNC(dt, 'HH24')
将日期截断为小时(分钟和秒)
设置为0)TRUNC
更正时间段TO_NUMBER(TO_CHAR(dt, 'HH24')) - 9)
必须每小时添加一秒COUNT DISTINCT
你
计算不同时间的数量。答案 1 :(得分:1)
您想要计算自每条记录的最早日期/时间以来的小时数。这是一种方法:
select trunc(dt), count(distinct trunc((dt - min_dt) / 24)) as num_hours
from (select t.*, min(dt) over (partition by trunc(dt) order by dt) as min_dt
from t
) t
group by trunc(dt);
此表达式(dt - min_dt) / 24
计算每个日期/时间与较早的小时之间的时间。 count(distinct)
计算日期中所见的不同小时数。