如何计算连续的时间范围
我的数据是这样的:
Id| Em_Name|Em_Reg_Date
--------------------------------
1 | John |2010-03-30 00:00:00
1 | John |2010-03-31 00:00:00
2 | Marc |2010-10-26 00:00:00
2 | Marc |2010-10-27 00:00:00
2 | Marc |2010-10-28 00:00:00
2 | Marc |2010-10-29 00:00:00
2 | Marc |2010-12-16 00:00:00
2 | Marc |2010-12-17 00:00:00
2 | Marc |2010-12-20 00:00:00
2 | Marc |2010-12-21 00:00:00
2 | Marc |2010-12-22 00:00:00
3 | Paul |2010-02-25 00:00:00
3 | Paul |2010-02-26 00:00:00
3 | Paul |2010-12-13 00:00:00
3 | Paul |2010-12-14 00:00:00
3 | Paul |2010-12-15 00:00:00
--------------------------------
时间范围是连续的时间段。
例如Paul 有以下两 (2) 个时间范围
FRAME 1 FROM 2010-02-25 00:00:00 to 2010-02-26 00:00:00
FRAME 2 FROM 2010-12-13 00:00:00 to 2010-12-15 00:00:00
所以,结果应该是这样的
1 John 1
2 Marc 3
3 Paul 2
问题是:我需要计算每个员工的时间范围。
这里的问题在于我需要隔离连续的时间范围以便对它们进行计数。我什至尝试过声明游标(可行,但我必须将数据存储在临时表中)我希望它在“简单”的 sql 语句中 使用 max 查找开始日期仅适用于一帧。你找不到最大的第二/第三帧。
有没有人有新鲜的想法?
最佳答案
SQL Server 2005+
select em_name, COUNT(distinct startdate)
from
(
select *, startdate = em_reg_date - ROW_NUMBER() over (
partition by em_name order by em_reg_date) +1
from tbl
) X
group by Em_Name
Oracle、DB2 也支持 Row_Number(),但是您需要一些变化来计算开始日期
关于SQL计算已知时期内的不同时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5117500/