SQL查询 - 查找日期和时间
问题描述:
之间我有一个表像这样SQL查询 - 查找日期和时间
| EmpId | InTime | OutTime |
+----------+------------------+------------------+
| 101 | 01/02/2009 10:00 | 01/02/2009 20:00 |
| 101 | 01/02/2009 18:00 | 01/02/2009 20:00 |
| 102 | 01/02/2009 2:00 | 01/02/2009 2:00 |
| 103 | 01/02/2009 2:00 | 01/02/2009 5:00 |
| 104 | 01/02/2009 3:03 | 01/02/2009 5:00 |
| 104 | 01/02/2009 3:45 | 01/02/2009 7:00 |
| 105 | 01/02/2009 10:00 | 01/02/2009 22:00 |
| 106 | 01/02/2009 3:00 | 01/02/2009 4:00 |
| 106 | 01/02/2009 3:58 | 01/02/2009 4:10 |
+----------+------------------+------------------+
我想找到的插图中的记录。
我的表有100多条记录。
例:
- 检查EMPID - 希望同
- 然后检查日期&时间,在第一个值开始于10和20时结束,并在第二个记录开始于8月底和同时在20。所以第一个记录结束时间要与第二记录结束时间(其间日期&时间)
输出这样的替换:
| EmpId | StartTime | EndTime | EndTime1 |
+----------+------------------+------------------+------------------+
| 101 | 01/02/2009 10:00 | 01/02/2009 20:00 |01/02/2009 18:00 |
| 101 | 01/02/2009 18:00 | 01/02/2009 20:00 | |
| 102 | 01/02/2009 2:00 | 01/02/2009 2:00 | |
| 103 | 01/02/2009 2:00 | 01/02/2009 5:00 | |
| 104 | 01/02/2009 3:03 | 01/02/2009 5:00 |01/02/2009 3:45 |
| 104 | 01/02/2009 3:45 | 01/02/2009 7:00 | |
| 105 | 01/02/2009 10:00 | 01/02/2009 22:00 | |
| 106 | 01/02/2009 3:00 | 01/02/2009 4:00 | 01/02/2009 3:58 |
| 106 | 01/02/2009 3:58 | 01/02/2009 4:10 | |
+----------+------------------+------------------+------------------+
答
假设你真的想取代第1记录结束的时间与第2纪录启动时间,因为你在你想要的输出显示,并且还假定共享相同EMPID所有行是重叠的,我认为一个解决办法是如此简单:
select empid, t1.intime starttime, t2.intime endtime t1.outtime endtime1
from table_name t1
left outer join table_name t2 on t1.empid = t2.empid and t1.intime < t2.intime order by 1,2;
使用selfjoin添加列使用后续条目的开始时间。使用左连接来保留没有后续行的行
到目前为止您尝试了什么 –