我有点问题。我需要在数据库中从userID中选择一个状态。问题是,每个userID都有多行,具有不同的日期戳。保存历史记录,在数据库中。
我已尝试使用UserID进行分组,但它会在某些用户上为我提供多行,而不是仅使用最新的行,这就是我想要的。
这是我的疑问:
select status, userid from EmployeeTable
where UserId in ('nis','rele')
and asofdate in
(select max(asofdate) from
EmployeeTable
where userid in ('nis','rele')
group by userid
)
所以EmployeeTable有AsOfDate列,基本上是更新日期。所以我只想要具有最高AsOfDate的行用于特定的UserID。 我究竟做错了什么? 我猜这与我使用in子句有关。我放在那里的用户ID越多,用户ID将输出多行,但我需要能够一次选择多个用户,以提高性能。
答案 0 :(得分:4)
您所做错的是您正在检查特定用户和特定日期,但每个用户与其对应日期之间没有任何关联。如果用户的记录与另一个用户的最新日期匹配,您也将获得该记录。
获取用户ID及其相应的最新日期,然后再次加入该表以获取该记录的状态值。
select e.status, e.userid from EmployeeTable e
inner join (
select userid, max(asofdate) as d
from EmployeeTable
where userid in ('nis','rele')
group by userid
) u on u.userid = e.userid and u.d = e.asofdate
答案 1 :(得分:3)
试试这个:
SELECT status,userid
FROM EmployeeTable E
JOIN
(SELECT UserId ,max(asofdate) as asofdate
FROM EmployeeTable
WHERE userid in ('nis','rele')
GROUP BY UserId )a
ON E.userid =a.userid
AND E.asofdate=a. asofdate