如何将return最新记录到SQL中的每个人ID
How to return the latest record to each person ID in SQL
我正在尝试return 将最新记录添加到数据库中的每个 recordId。
我有一个存储通知的 table,每个通知都有自己的 ID,但它们与一个 personId 相关联。
但是这个人的 Id 可以有多个通知。我想要做的是只检索通知 table.
上每个 personId 的最后一个通知
例如,我可以有多个 personId,每个 personId 可以有多个通知,但每个 personId 应该 return 只是最后创建的通知(PS 我为每个新通知保存时间戳)
到目前为止我想到的是:
SELECT *
FROM Notification
WHERE notificationEndDate <= '20151101'
AND
person_id IN
(
SELECT MAX(notificationEndDate )
FROM Notification
)
查询运行,但看起来我把它丢在了某个地方。
谁能建议我如何实现它?
试试这个
WITH CTE1 AS(
SELECT *, ROW_NUMBER() OVER(PARTITION BY person_id ORDER BY per_visa_ed
DESC) AS Row_COUNT
FROM TPER_VISA
)
SELECT * FROM CTE1 WHERE Row_COUNT = 1
Return 如果不存在具有相同 personId 的后续行。
SELECT *
FROM TPER_VISA t1
WHERE per_visa_ed <= '20151101'
AND NOT EXISTS (select 1 from TPER_VISA t2
where t2.personId = t1.personId
and t2.per_visa_ed <= '20151101'
and t2.per_visa_ed > t1.per_visa_ed)
ORDER BY per_visa_ed
我正在尝试return 将最新记录添加到数据库中的每个 recordId。 我有一个存储通知的 table,每个通知都有自己的 ID,但它们与一个 personId 相关联。 但是这个人的 Id 可以有多个通知。我想要做的是只检索通知 table.
上每个 personId 的最后一个通知例如,我可以有多个 personId,每个 personId 可以有多个通知,但每个 personId 应该 return 只是最后创建的通知(PS 我为每个新通知保存时间戳)
到目前为止我想到的是:
SELECT *
FROM Notification
WHERE notificationEndDate <= '20151101'
AND
person_id IN
(
SELECT MAX(notificationEndDate )
FROM Notification
)
查询运行,但看起来我把它丢在了某个地方。 谁能建议我如何实现它?
试试这个
WITH CTE1 AS(
SELECT *, ROW_NUMBER() OVER(PARTITION BY person_id ORDER BY per_visa_ed
DESC) AS Row_COUNT
FROM TPER_VISA
)
SELECT * FROM CTE1 WHERE Row_COUNT = 1
Return 如果不存在具有相同 personId 的后续行。
SELECT *
FROM TPER_VISA t1
WHERE per_visa_ed <= '20151101'
AND NOT EXISTS (select 1 from TPER_VISA t2
where t2.personId = t1.personId
and t2.per_visa_ed <= '20151101'
and t2.per_visa_ed > t1.per_visa_ed)
ORDER BY per_visa_ed