在SQL中删除时间范围和相应更新值之间的重叠
我无法消除日期/时间变量中的重叠。我想相应地替换日期/时间值,以删除时间线中的所有重叠。例如,我的数据如下所示:在SQL中删除时间范围和相应更新值之间的重叠,sql,sql-server,Sql,Sql Server,我无法消除日期/时间变量中的重叠。我想相应地替换日期/时间值,以删除时间线中的所有重叠。例如,我的数据如下所示: StartTime EndTime 2018-09-17 11:00AM 2018-09-17 12:00PM *2018-09-17 12:00PM 2018-09-17 01:00PM* *2018-09-17 12:30PM 2018-09-17 01:00PM* 2018-09-17 01:0
StartTime EndTime
2018-09-17 11:00AM 2018-09-17 12:00PM
*2018-09-17 12:00PM 2018-09-17 01:00PM*
*2018-09-17 12:30PM 2018-09-17 01:00PM*
2018-09-17 01:00PM 2018-09-17 02:00PM
*2018-09-17 02:00PM 2018-09-17 02:30PM*
*2018-09-17 02:00PM 2018-09-17 03:00PM*
2018-09-17 03:00PM 2018-09-17 04:00PM
StartTime EndTime
2018-09-17 11:00AM 2018-09-17 12:00PM
*2018-09-17 12:00PM 2018-09-17 12:30PM*
*2018-09-17 12:30PM 2018-09-17 01:00PM*
2018-09-17 01:00PM 2018-09-17 02:00PM
*2018-09-17 02:00PM 2018-09-17 02:30PM*
*2018-09-17 02:30PM 2018-09-17 03:00PM*
2018-09-17 03:00PM 2018-09-17 04:00PM
如您所见,时间段(带**的行)之间存在一些重叠,我想调整StartTime或EndTime值以避免重叠。例如,我希望得到最终的表,如下所示:
StartTime EndTime
2018-09-17 11:00AM 2018-09-17 12:00PM
*2018-09-17 12:00PM 2018-09-17 01:00PM*
*2018-09-17 12:30PM 2018-09-17 01:00PM*
2018-09-17 01:00PM 2018-09-17 02:00PM
*2018-09-17 02:00PM 2018-09-17 02:30PM*
*2018-09-17 02:00PM 2018-09-17 03:00PM*
2018-09-17 03:00PM 2018-09-17 04:00PM
StartTime EndTime
2018-09-17 11:00AM 2018-09-17 12:00PM
*2018-09-17 12:00PM 2018-09-17 12:30PM*
*2018-09-17 12:30PM 2018-09-17 01:00PM*
2018-09-17 01:00PM 2018-09-17 02:00PM
*2018-09-17 02:00PM 2018-09-17 02:30PM*
*2018-09-17 02:30PM 2018-09-17 03:00PM*
2018-09-17 03:00PM 2018-09-17 04:00PM
在某些情况下,需要修改结束时间(例如,此数据中的第一个重叠),有时需要调整开始时间(例如,第二个重叠)。我当前的代码只适用于第一种情况,不能捕获数据中的所有重叠
WITH CTE AS (
SELECT StartTime,
LEAD(EndTime,1) OVER (ORDER BY StartTime, EndTime) AS NextStartTime
FROM myTable
)
SELECT StartTime,
CASE WHEN EndTime > Next_StartTime THEN Next_StartTime
ELSE EndTime END AS EndTime
FROM CTE
我知道这看起来很复杂,数据本身也很混乱,但我不能真正改变我的原始数据本身。我非常感谢在这个问题上的任何帮助。提前谢谢。确定哪一列应该更改的逻辑是什么?您的描述是不确定的。@GordonLinoff,其背后的逻辑是时间范围应在同一日期内连续(.例如2018-09-17)。因此,对于第一个重叠,如果您只需将EndTime从下午1:00调整到下午12:30,我可以删除重叠,并且时间值将是连续的,没有任何中断。(例如下午12:00-12:30/1230至下午1:00)。但是如果你在下午2点到3点之间看到第二个重叠,如果你把开始时间定在下午2点到2点30分,数据将是连续的,没有任何中断或重叠。另外,我想说,如果数据是连续的,当前行的结束时间应该等于下一行的开始时间。但重要的是,如果时间被分解成一个不到小时的单位,我想抓住所有这些小片段,而不是把时间分解成小时。例如,类似“2018-09-17 12:30PM 2018-09-17 01:00PM”的内容应该作为一个单独的单元捕获,而不是将其放入2018-09-17 12:00PM 2018-09-17 01:00PMHi-您似乎没有实际描述需要应用的逻辑。似乎有3个选项:1)始终调整开始日期以与前一行的结束日期对齐2)始终调整结束日期以与下一行的开始日期对齐3)根据需要明确定义的某些逻辑调整开始或结束日期。此外,当您说“在同一日期内连续”时,记录的开始日期和结束日期是否会在午夜重叠?如果可以,这是否会影响您需要应用的逻辑?