如何将最新记录返回给SQL中的每个人ID

时间:2015-09-01 11:11:26

标签: sql greatest-n-per-group

我正在尝试将最新记录返回到数据库中的每个recordId。 我有一个存储通知的表,每个通知都有自己的ID,但它们与一个personId相关联。 但是此人ID可以有多个通知。我想要做的是只检索通知表上每个personId的最后一个通知。

例如,我可以拥有多个personIds,每个personId可以有很多通知,但每个personId应该只返回最后创建的通知(PS我为每个新通知保存时间戳)

到目前为止我想出的是:

   SELECT *
   FROM Notification
   WHERE notificationEndDate <= '20151101'
   AND
   person_id IN
   (
    SELECT MAX(notificationEndDate )
    FROM Notification
   )

查询运行但看起来我丢失了它。 任何人都可以建议我如何实现它?

2 个答案:

答案 0 :(得分:2)

如果不存在具有相同personId的后续行,则返回一行。

SigalR

答案 1 :(得分:0)

试试这个

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