sql - 当一个的结束时间是另一个的开始时间时合并行,如果不是,那么就像在 SQL 中一样
问题描述
当一个的结束时间是另一个的开始时间时合并行,如果不是,那么就像在 SQL 中一样。例如:
DATE_SRNO start End Actual_Date
1 2018-08-04 12:22:00.000 2018-08-04 13:22:00.000 2018-08-04
1 2018-08-04 13:22:00.000 2018-08-04 16:46:00.000 2018-08-04
1 2018-08-04 20:17:00.000 2018-08-04 21:16:00.000 2018-08-04
1 2018-08-04 22:12:00.000 2018-08-04 22:28:00.000 2018-08-04
2 2018-08-05 19:08:00.000 2018-08-05 20:00:00.000 2018-08-05
2 2018-08-05 20:00:00.000 2018-08-05 20:52:00.000 2018-08-05
3 2018-08-20 07:27:00.000 2018-08-21 06:00:00.000 2018-08-20
3 2018-08-21 03:36:00.000 2018-08-21 04:36:00.000 2018-08-20
3 2018-08-21 04:36:00.000 2018-08-21 06:00:00.000 2018-08-20
预期输出:
Sr.No start End Actual_Date
1 2018-08-04 12:22:00.000 2018-08-04 16:46:00.000 2018-08-04
1 2018-08-04 20:17:00.000 2018-08-04 21:16:00.000 2018-08-04
1 2018-08-04 22:12:00.000 2018-08-04 22:28:00.000 2018-08-04
2 2018-08-05 19:08:00.000 2018-08-05 20:52:00.000 2018-08-05
3 2018-08-20 07:27:00.000 2018-08-21 06:00:00.000 2018-08-20
3 2018-08-21 03:36:00.000 2018-08-21 06:00:00.000 2018-08-20
我试过下面的查询,但没有得到确切的输出。
SELECT
T1.Malf_start,
T2.MalfEnd,
T1.COMPARE_DATE
FROM
#temp T1
INNER JOIN
#temp T2
ON T2.DATE_SRNO = T1.DATE_SRNO
AND T2.Malf_start = T1.MalfEnd
下面是我得到的结果。
start End Actual_Date
2018-08-04 12:22:00.000 2018-08-04 16:46:00.000 2018-08-04
2018-08-05 19:08:00.000 2018-08-05 20:52:00.000 2018-08-05
2018-08-21 03:36:00.000 2018-08-21 06:00:00.000 2018-08-20
解决方案
SELECT
t1.malf_start,
COALESCE(t2.malf_end, t1.malf_end) AS malf_end,
t1.actual_date
FROM
test_date t1
LEFT JOIN
test_date t2
ON t1.actual_date = t2.actual_date
AND t1.malf_end = t2.malf_start
LEFT JOIN
test_date t3
ON t1.actual_date = t3.actual_date
AND t1.malf_start = t3.malf_end
WHERE t3.malf_start IS NULL
说明:
- T1 是所有记录的列表。
- T2 是开始日期与 T1 中的结束日期匹配的记录。
- 如果没有 T2 匹配,我们将显示原始 T1 结束日期。
- T3 是检查 T2 中是否使用了任何 T1 记录。我们不想显示已附加到 T1 记录的记录。
推荐阅读
- html - 在表格html中将文本与右侧对齐
- excel - DAX 在获取仅包含数字的单元格时计算列的平均值
- javascript - 当文本框不为空或有值时禁用下拉菜单
- r - 将 plyr::ddply 转换为 dplyr
- c# - SendGrid:电子邮件活动 API JSON 响应的反序列化未填充对象
- c# - .NET / C# - 获取下一个半周结束日期
- excel - Excel函数还是工具?查找加起来为指定总和的所有对
- c# - Unity:如何避免将游戏对象拖入公共脚本变量?
- android - TomtomMap.getUserLocation() 总是返回 null?
- django - 允许用户使用 Django Stripe (dj-stripe) 仅使用非付费帐户创建一定数量的对象