我拉着我的头发试图解决这个问题。我有一个查询,它将在两个单独的列中显示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'
答案 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