2017-09-13 66 views
2

我拉我的頭髮試圖弄清楚。我有一個查詢將顯示在兩個單獨的列(最初在同一列)IN和OUT狀態和日期時間。查詢將以我需要的方式返回結果,但OUT日期顯示不正確。每個ID有多個輸入/輸出狀態和時間。我只需要最近24小時內的最新進/出時間。查詢將正確返回In時間,但很多Out時間顯示的日期都比In時間早。所以我需要看到的是,過去24小時內的OUT時間,如果用戶沒有簽出,應該是空白的。有人可以幫助我嗎?見下面的代碼。顯示失​​去狀態的最近日期

SELECT t1.ID, t1.FNAME, t1.InOut_Status AS Status_In, t1.Datetime AS 
Datetime_IN, t2.InOut_Status AS Status_Out, t2.Datetime As Datetime_OUT 
FROM table t1 
LEFT JOIN table t2 
    ON t1.id = t2.id 
    AND t2.InOut_Status = 'OUT' AND t1.Datetime >= DATEADD(hour, -24,GETDATE()) 
WHERE t1.InOut_Status = 'IN' 
+0

請仔細閱讀[這](http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question- on-a-public-forum /)提供一些關於改善問題的提示。使用適當的軟件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服務器2014'。語法和功能的差異往往會影響答案。 – HABO

回答

3

你可以用派生表來做到這一點。

... 
LEFT JOIN 
    (select t.id, max(t.Datetime) dt 
    from table t 
    group by t.id 
    where t.InOut_Status = 'OUT' 
    AND t.Datetime >= DATEADD(hour, -24,GETDATE())) t2 on t2.id = t1.id 
2

也許只是使用條件的聚集

SELECT ID, 
     FNAME, 
     MAX(CASE 
       WHEN InOut_Status = 'IN' 
       THEN Datetime 
      END) AS Datetime_IN, 
     MAX(CASE 
       WHEN InOut_Status = 'OUT' 
       THEN Datetime 
      END) AS Datetime_OUT 
FROM [Table] 
WHERE Datetime >= DATEADD(hour, -24, GETDATE()) 
GROUP BY ID, 
     FNAME