【发布时间】:2019-04-08 13:00:07
【问题描述】:
Employee 表有四列。员工,开始,结束,差异。 Diff 列是持续时间,计算方式为 End - Start。
我想找出开始和结束时间范围之间的冲突。 例如,员工 A 有三行: 第一行开始时间是 01:02,结束时间是 01:05,但第二行开始时间是 01:03,这是第一行数据的冲突。
样本数据:
employee StartDate EndDate Start End Diff
A 04/08/2019 04/08/2019 01:02:00 01:05:00 3
A 04/08/2019 04/08/2019 01:03:00 01:08:00 5
A 04/08/2019 04/08/2019 01:014:00 01:21:00 7
B 04/08/2019 04/08/2019 02:00:00 02:17:00 17
我只想为员工 A 选择开始和结束时间重叠的特定开始和结束时间,并且想使用 t-sql 计算新列中的冲突总长度。我是新手,需要帮助。有人请吗?
SELECT TOP (100) a.ccx_employeename AS employee
,CONVERT(Date,[a].[ccx_starttime]) AS [Start Date],CONVERT(Date,[a].[ccx_endtime]) AS [End Date], CONVERT(time (0), a.ccx_starttime) AS StartTime
, CONVERT(time (0), a.ccx_endtime) AS EndTime
, CONVERT (time(0), (a.ccx_endtime - a.ccx_starttime)) AS Duration
FROM ccp_sim_MSCRM.dbo.Filteredccx_Recorded_Service as a
where CONVERT(time (0), a.ccx_starttime) BETWEEN CONVERT(time (0), a.ccx_starttime) And CONVERT(time (0), a.ccx_endtime)
由于第一行和第二行有冲突,我想显示这两行。在此示例中,冲突持续时间为 2 分钟。第一行结束时间是 01:05,但第二行开始时间是 01:03,所以冲突持续时间是 01:05 - 01:03 = 2 分钟
期望的输出
employee StartDate EndDate Start End Diff
A 04/08/2019 04/08/2019 01:02:00 01:05:00 3
A 04/08/2019 04/08/2019 01:03:00 01:08:00 5
duration of conflict : 2 mins
【问题讨论】:
-
您使用的是 MySQL、Sybase 还是 MS SQL Server?
-
MS Sql 服务器管理工作室
-
因此,为了更好地理解您的问题,并尝试激发您自己的一些想法......您基本上想要一个结束时间大于开始时间的员工的任何行的结果集下面的行。您将需要对员工进行分组,并按开始时间排序。其他需要考虑的是日期,我在这里看不到任何迹象,但这可能需要考虑,因为您的逻辑需要了解一天的时间不关心其他日子的时间。最后,不需要
TOP 100,这可能会限制你前进。 -
haag1 开始日期和结束时间相同。例如,对于员工 A,两个时间范围都与 04/08/2019 开始的日期相同,一份工作的时间是 01:02:00- 01:05:00,第二份工作的时间是 01:03:00-01 :08:00 在这种情况下会有什么修改?
-
顺便提一下你的问题非常好。
标签: sql sql-server tsql ssms