获取用户的最新行

时间:2012-09-03 10:45:12

标签: sql group-by

我有点问题。我需要在数据库中从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将输出多行,但我需要能够一次选择多个用户,以提高性能。

2 个答案:

答案 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