SQL 查询 - 在日期和时间之间查找
Posted
技术标签:
【中文标题】SQL 查询 - 在日期和时间之间查找【英文标题】:SQL Query- Find in between date and time 【发布时间】:2017-03-02 06:37:32 【问题描述】:我有一张这样的桌子
| 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 |
+----------+------------------+------------------+
我想查找中间记录。
我的表有超过 10 万条记录。
例如:
-
检查 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】:假设您实际上想要将第一条记录结束时间替换为第二条记录开始时间,如您在所需输出中显示的那样,并且假设共享相同 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;
使用自联接添加具有后继条目开始时间的列。使用左联接来保留没有后继的行
【讨论】:
以上是关于SQL 查询 - 在日期和时间之间查找的主要内容,如果未能解决你的问题,请参考以下文章