我需要帮助创建我的查询,并将不胜感激,如果有人可以帮助。
我有一个员工时间输入网站。该网站保存了他们工作的开始和结束时间。
他们可以在同一天输入几个不同的时间,只要这些时间没有超频以外的其他输入的时间。
例如,如果他们的时钟从上午08:00到下午12:00,那么他们的第二个条目不能在这两个时间之间。
我有一个公式可以检查两个不同的范围。
最大值(开始1,开始2)〈最小值(结束1,结束2)
我想在我的数据库中实现这个公式。
例如
| 员工ID|选定日期|开始时间值|结束时间值|
| - ------|- ------|- ------|- ------|
| 1个|2022年10月10日|1个|十个|
| 1个|2022年10月10日|十五|二十个|
| 1个|2022年10月10日|二十五|三十七|
| 1个|2022年10月10日|三十五|四十|
| 1个|2022年10月10日|十一|二十一|
在上面输入的最后两个是超频。
35 - 40条目是worng,因为35在25-37之间,这是以前输入的。11- 21条目是错误的,因为它涵盖了15-20。
基本上,我想知道如何在SQL中实现这个公式Max(start 1,start 2)〈Min(end 1,end 2)
我试过这样的方法,但是没有用
SELECT
T1.EmployeeID,T1.SelectedDate,T1.StartTimeValue,T1.EndTimeValue,
T2.EmployeeID,T2.SelectedDate,T2.StartTimeValue,T2.EndTimeValue
FROM [adilsari_Test].[dbo].[EmployeeTimeSheetModel] T1
INNER JOIN [adilsari_Test].[dbo].[EmployeeTimeSheetModel] T2 ON T1.EmployeeID = t2.EmployeeID
AND T1.TimeSheetID <> t2.TimeSheetID
AND T1.SelectedDate = T2.SelectedDate
WHERE (SELECT MAX(v) FROM(VALUES (T1.StartTimeValue,T2.StartTimeValue)) AS value(v))>10 AND MIN(T1.EndTimeValue,T2.EndTimeValue)
1条答案
按热度按时间yjghlzjz1#
我认为您正在寻找重叠的范围,在这种情况下,您可以引用Determine Whether Two Date Ranges Overlap,查询如下所示: