gpt4 book ai didi

SQL计算已知时期内的不同时间范围

转载 作者:行者123 更新时间:2023-12-04 20:10:47 25 4
gpt4 key购买 nike

如何计算连续的时间范围

我的数据是这样的:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com