sql - 删除时间范围之间的重叠并在 SQL 中相应地更新值
问题描述
我无法消除日期/时间变量中的重叠。我想相应地替换我的日期/时间值以删除时间线中的所有重叠。例如,我的数据如下所示:
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 值以避免重叠。例如,我想获得如下所示的决赛桌:
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
在某些情况下,需要修改 EndTime(例如该数据中的第一个重叠),有时需要调整 StartTime(例如第二个)。我当前的代码仅适用于第一种情况,并没有捕获数据中的所有重叠。
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
我知道这看起来很复杂,数据本身也很混乱,但我无法真正对原始数据本身进行更改。我很感激在这个问题上的任何帮助。先感谢您。
解决方案
推荐阅读
- flutter - ShaderMask LinearGradient 停止奇怪的行为
- awk - 如何将 awk 脚本附加到文件中?
- graph - 在 Ocaml 中检测无向图中的循环
- react-native - React native:使用计时器更改状态时组件不会重新呈现
- firebase - Firebase 用户身份验证不同实例上的多个用户
- javascript - JavaScript 数学计算 - 与 Excel 公式相比,结果不同
- reactjs - React Route 为每条路线渲染不同的横幅图像
- javascript - 如何等待异步?为什么等待不起作用?
- mapbox-gl-js - 在哪里可以找到 mapbox-gl 的绘制属性列表?
- php - 如何在 laravel 黄昏测试中共享用户数据