大佬教程收集整理的这篇文章主要介绍了如何在标准 sql92 或 mysql 中合并表,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我在表中设置了以下内容:
empID | start_time | end_time |
---|---|---|
1 | 8 | 9 |
1 | 9 | 10 |
1 | 11 | 12 |
1 | 12 | 13 |
1 | 13 | 14 |
1 | 14 | 15 |
我想有一个 sql(或一个 sql 进程)将前一组转换为下一组:
empID | start_time | end_time |
---|---|---|
1 | 8 | 10 |
1 | 11 | 15 |
这意味着如果一条记录的end_time等于下一条记录的start_time,我们将删除一条记录并用新值更新记录(当然不接触主表)
这是一种间隙和孤岛问题。在这种情况下,您可以使用滞后来查看“孤岛”的开始位置,然后使用累积总和在孤岛内分配相同的数字并进行聚合:
SELEct empid,min(start_timE),max(end_timE)
from (select t.*,sum(case when prev_end_time = start_time then 0 else 1 end) over (partition by empid order by start_timE) as island
from (select t.*,lag(end_timE) over (partition by empid order by start_timE) as prev_end_time
from t
) t
) t
group by empid,island;
Here 是一个 dbfiddle。
以上是大佬教程为你收集整理的如何在标准 sql92 或 mysql 中合并表全部内容,希望文章能够帮你解决如何在标准 sql92 或 mysql 中合并表所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。