检索每个用户的最新记录ID

时间:2020-10-21 19:31:06

标签: sql sql-server

我想问的是,我找到的示例与我的需求不完全匹配。

我有一张桌子:

Id        PersonId PersonNumber        StartDate
--------- -------- ------------------- -----------------
1         1        E1                  2020-10-21
2         1        Q1                  2019-01-01
3         2        E2                  2020-10-01
4         2        Q2                  2019-10-01

我需要检索最近记录的ID。在这种情况下,其编号为1和3。

我一直在使用

SELECT MAX(Id) AS Id
FROM PersonNumber AS PersonNumber_1
GROUP BY PersonId

但这是不正确的,因为不一定必须按顺序输入数据,因此MAX(Id)实际上可能是较旧的记录。我尝试做SELECT ID, MAX(StartDate),但由于在汇总或GROUP BY中未使用Id,因此无法正常工作

如何获取每个Id的最新记录的PersonId

1 个答案:

答案 0 :(得分:1)

您需要使用ROW_NUMBER之类的东西来对PersonId进行数据“分区”,以便获取每个PersonId的“最新条目”-像这样:< / p>

WITH CTE AS
(
    SELECT
        Id, PersonId, PersonNumber, StateDate,
        RowNum = ROW_NUMBER() OVER (PARTITION BY PersonId ORDER BY StartDate DESC)
    FROM
        PersonNumber
)
SELECT 
    Id, PersonId, PersonNumber, StateDate,
FROM
    CTE
WHERE
    RowNum = 1