【问题标题】:SQL Query- Find in between date and timeSQL 查询 - 在日期和时间之间查找
【发布时间】: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 万条记录。

例如:

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

【问题讨论】:

    标签: mysql ms-access vba


    【解决方案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;
    

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

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 2014-12-06
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      相关资源
      最近更新 更多