如何用SQL获取每个用户最大ImportDate对应的全部记录?
筛选每个用户最大ImportDate对应的所有记录
要获取每个用户(以firstname+lastname标识)对应最大ImportDate的全部记录,且返回表中所有列(同一日期有多条则全部保留),可以用以下两种常见写法:
方法1:窗口函数RANK()
SELECT * FROM ( SELECT *, RANK() OVER (PARTITION BY firstname, lastname ORDER BY importdate DESC) AS rnk FROM ClmEligibility_Intake WHERE lastname = 'james' AND firstname = 'bob' ) t WHERE rnk = 1;
- 内层用
PARTITION BY按姓名分组,ORDER BY importdate DESC让最大日期排在前面 RANK()会给同一分组内最大日期的所有记录标记为排名1,外层筛选rnk=1就能拿到所有符合条件的记录,自动保留原表所有列
方法2:子查询关联原表
SELECT c.* FROM ClmEligibility_Intake c JOIN ( SELECT firstname, lastname, MAX(importdate) AS max_importdate FROM ClmEligibility_Intake WHERE lastname = 'james' AND firstname = 'bob' GROUP BY firstname, lastname ) t ON c.firstname = t.firstname AND c.lastname = t.lastname AND c.importdate = t.max_importdate;
- 子查询先算出目标用户的最大
ImportDate - 关联原表匹配姓名和日期,直接返回该日期下的所有完整记录
为什么你之前的聚合查询不生效?
你原来的SELECT MAX(importdate), firstname, lastname GROUP BY写法,本质是按姓名聚合,只能返回一条聚合后的结果(仅包含聚合字段和分组字段),既无法带回ID等其他列,也没办法保留同一最大日期下的多条记录。
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

