gpt4 book ai didi

sql-server - TSQL 查找重叠时间

转载 作者:行者123 更新时间:2023-12-04 00:45:30 25 4
gpt4 key购买 nike

当给出两个表时

员工表

EmpID  Name
1 Jon
2 Smith
3 Dana
4 Nancy

实验室 table
EmpID   StartTime   EndTime    Date            LabID
1 10:00 AM 12:15 PM 01/JAN/2000 Lab I
1 11:00 AM 14:15 PM 01/JAN/2000 Lab II
1 16:30 PM 18:30 PM 01/JAN/2000 Lab I

2 10:00 AM 12:10 PM 01/JAN/2000 Lab I

根据给定的详细信息,我必须找出每个员工在每个日期的重叠时间和非重叠时间。 ( StartTime 和 EndTime 的类型为 varchar )。
The expected output is 
-------------------------------------------------------------------------------
EmpID| Name| Overlapping | Non-Overlapping | Date
Period Period
-------------------------------------------------------------------------------
1 Jon | 10:00 AM to 12:15 PM |16:30 PM to 18:30 PM | 01/JAN/2000
| AND | |
| 11:00 AM to 14:15 PM | |
| AND ...(If any) | |
--------------------------------------------------------------------------------

2 Smith| NULL | 10:00 AM to 12:10 PM |01/JAN/2000
--------------------------------------------------------------------------------

请帮助我使用 TSQL(SQL Server 2005/2008)带来这样的输出。

最佳答案

首先,您可能应该考虑使用 DateTime 字段来存储 StartTime 和 EndTime,从而使计算更容易,并且不需要日期字段。

SELECT t1.EmpID, 
t1.StartTime,
t1.EndTime,
t2.StartTime
t2.EndTime,
FROM lab t1
LEFT OUTER JOIN lab t2
ON t2.StartTime BETWEEN t1.StartTime AND t1.EndTime
AND t2.EmpID = t1.EmpID
ORDER BY t1.EmpID,
t1.StartTime,
t2.StartTime

这不会让你得到你列出的确切格式,但它很接近。你应该得到:
| EmpID|   Name|    Normal Period    | Overlapping Period  |
------------------------------------------------------------
| 1 | Jon | 10:00 AM | 12:15 PM | 11:00 AM | 02:15 PM |
------------------------------------------------------------
| 2 | Smith | 10:00 AM | 12:10 PM | NULL | NULL |
------------------------------------------------------------

正常时期内的每个重叠时期都会出现在新的一行中,但任何没有重叠的时期都只有一行。如果您特别想要“xx:xx xx 到 xx:xx xx”格式,您可以轻松地连接字段。希望这对你有所帮助。

关于sql-server - TSQL 查找重叠时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3753117/

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