1

我有一点问题。我需要在我们的数据库中从用户 ID 中选择一个状态。问题是,每个用户 ID 都有多行,带有不同的日期戳。在数据库中保留历史记录。

我已经尝试使用 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 列,它基本上是更新日期。所以我只想要特定 UserID 的 AsOfDate 最高的行。我究竟做错了什么?我猜这与我使用 in 子句有关。我放在那里的用户 ID 越多,输出多行的用户 ID 就越多,但我需要能够一次选择多个用户,以提高性能。

4

2 回答 2

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
于 2012-09-03T10:54:24.887 回答
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
于 2012-09-03T10:48:34.103 回答