根据最新日期过滤表记录

时间:2019-02-14 16:28:41

标签: sql postgresql greatest-n-per-group

已经问过类似的问题,但是我可以找到我真正想要的东西。由于我是SQL新手,所以我无法从类似问题中得出解决方案。

出现我的问题,我有一个表格,用于存储如下所示的客户的保险详细信息

enter image description here

company_id下可能有多个customer_id。如您在图像中看到的,两行的前5列可以有相似的数据,但due_date除外。我想编写一个查询,该查询返回每个客户的最新保险明细(即,每个客户的max(due_date)唯一记录)在每个公司之下。也就是说,查询应返回以下记录

(100,548754,nia,1000000,Banglore,24-02-2020)
(100,254475,lpa,1000000,Delhi,24-02-2020)
(103,958740,cba,1000000,Banglore,24-06-2021)

我尝试了不同的查询,但是所有返回的重复记录

1 个答案:

答案 0 :(得分:0)

SELECT DISTINCT ON (company_id,customer_id) * 
FROM table 
ORDER BY company_id,customer_id,due_date DESC

如果在SELECT语句中指定DISTINCT ON (),则将获得每个集合的第一行,其中赋予DISTINCT ON()的表达式具有相等的值。 您需要ORDER BY来确保每组中的第一行都是最新日期。