显示退出状态的最新日期

时间:2017-09-13 18:19:04

标签: sql sql-server tsql datetime

我拉着我的头发试图解决这个问题。我有一个查询,它将在两个单独的列中显示IN和Out Status和Datetime(最初在同一列中)。查询将以我需要的方式返回结果,但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'

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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