【问题标题】:Get newest row for user获取用户的最新行
【发布时间】:2012-09-03 10:45:11
【问题描述】:

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

【问题讨论】:

    标签: sql group-by


    【解决方案1】:

    您做错的是您正在检查特定用户和特定日期,但每个用户与其对应的日期之间没有联系。如果一个用户的记录与另一个用户的最新日期相匹配,您也将获得该记录。

    获取用户 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
    

    【讨论】:

      【解决方案2】:

      试试这个:

      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-08-08
        • 2015-09-01
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 2016-11-02
        • 2020-04-06
        • 2023-03-22
        • 2014-05-03
        相关资源
        最近更新 更多