如何编写SQL查询获取各customer_website最近年份的记录?
获取每个customer_website的最新年份记录SQL实现
需求说明:从目标表中筛选出每个customer_website对应最近年份的记录,例如amazon.com存在3条记录(2条2019年、1条2020年),仅保留2020年的那条,最终输出记录ID集合为(10, 2, 3, 4, 5, 7, 8)。
方法一:使用窗口函数(推荐,兼容多数现代数据库)
窗口函数ROW_NUMBER()可实现分组内排序筛选,适用于PostgreSQL、MySQL 8.0+、SQL Server等数据库:
WITH ranked_records AS ( SELECT id, customer_website, year, -- 按网站分组,同组内按年份倒序排名,最新年份的记录排名为1 ROW_NUMBER() OVER (PARTITION BY customer_website ORDER BY year DESC) AS rn FROM your_table_name ) SELECT id FROM ranked_records WHERE rn = 1 ORDER BY id;
方法二:子查询关联(兼容低版本数据库)
如果你的数据库不支持窗口函数(如MySQL 5.x),可以先通过子查询获取每个网站的最大年份,再关联原表筛选:
SELECT t1.id FROM your_table_name t1 INNER JOIN ( -- 先计算每个customer_website对应的最大年份 SELECT customer_website, MAX(year) AS max_year FROM your_table_name GROUP BY customer_website ) t2 ON t1.customer_website = t2.customer_website AND t1.year = t2.max_year ORDER BY t1.id;
注意:将上述代码中的your_table_name替换为实际表名,确保字段名id、customer_website、year与你的表结构一致。
内容的提问来源于stack exchange,提问作者Dinesh Ramesh
相关产品推荐
相关产品推荐

