gpt4 book ai didi

mysql - SQL 查询 - 在日期和时间之间查找

转载 作者:行者123 更新时间:2023-11-29 19:18:47 25 4
gpt4 key购买 nike

我有一张这样的 table

|  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 |
+----------+------------------+------------------+

我想找到中间记录。

我的表有超过 100k 条记录。

例如:

  1. 检查 Empid - 希望相同
  2. 然后检查日期和时间,第一个值是从 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 | |
+----------+------------------+------------------+------------------+

最佳答案

假设您实际上想要用第二条记录开始时间替换第一条记录结束时间,如您在所需输出中显示的那样,并且还假设共享相同 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;

使用自连接来添加包含后继条目的开始时间的列。使用左连接保留没有后继的行

关于mysql - SQL 查询 - 在日期和时间之间查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42548433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com