2017-03-02 201 views
0

之間我有一個表像這樣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多條記錄。

例:

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

到目前爲止您嘗試了什麼 –

回答

0

假設你真的想取代第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添加列使用後續條目的開始時間。使用左連接來保留沒有後續行的行