我想问的是,我找到的示例与我的需求不完全匹配。
我有一张桌子:
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
?
答案 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