多条相同记录,取最新的一条

阅读更多
在很多场景下,都需要记录历史记录,比如同一个病人的多条检查记录,如果这些记录在同一张表里,如何取出或者更新最新的一条记录呢?

可以利用sql中的分区函数 partition by 和 取行号函数 row_number()
具体思路:根据病人ID字段(需保证唯一性)进行分区,拿到所有病人按更新时间从近到远排序的一个大集合,然后在where条件里指明查的具体的ID号以及该ID号所有记录中的第几条,即为病人最新的记录。

eg.

select * from (select t.*, row_number() over (partition by patientID order by update_time desc) num from t_exam_info t) where num = 1 and patientID = '0001';

执行此条语句,则会返回病人ID为‘0001’的最新的一条检查记录。


你可能感兴趣的:(sql)