SQL需求:按部门取唯一ID对应最大日期,按RevNo取最新创建记录
解决方案:获取每个RevNo的最新记录
没问题,针对你要查询每个RevNo对应最新Created日期完整记录的需求,我给你两种常用的SQL实现方法,你可以根据自己使用的数据库版本和实际场景选择:
方法一:使用窗口函数(推荐,现代SQL写法)
窗口函数是处理这类分组取Top N场景的最优方案之一,逻辑清晰且效率不错。这里用ROW_NUMBER()来给每个RevNo分组的记录按创建日期倒序编号,取编号为1的那条就是最新记录:
WITH ranked_records AS ( SELECT RevNo, RevContent, PIC, Created, -- 按RevNo分组,每组内按Created降序排序,生成序号 ROW_NUMBER() OVER (PARTITION BY RevNo ORDER BY Created DESC) AS rn FROM your_table_name -- 替换成你的实际表名 ) SELECT RevNo, RevContent, PIC, Created FROM ranked_records WHERE rn = 1;
注意:如果同一个RevNo存在多条相同最大Created日期的记录,ROW_NUMBER()会随机选一条;如果需要返回所有这些同日期的记录,可以把ROW_NUMBER()换成RANK()或者DENSE_RANK()。
方法二:使用子查询关联(兼容老版本数据库)
如果你的数据库不支持窗口函数(比如一些旧版MySQL),可以用子查询先拿到每个RevNo的最大创建日期,再关联原表获取完整记录:
SELECT t1.* FROM your_table_name t1 -- 替换成你的实际表名 INNER JOIN ( -- 先得到每个RevNo对应的最新日期 SELECT RevNo, MAX(Created) AS max_created FROM your_table_name GROUP BY RevNo ) t2 ON t1.RevNo = t2.RevNo AND t1.Created = t2.max_created;
这个方法的特点是兼容性好,但如果同一个RevNo有多个相同的最大Created日期,会返回所有符合条件的记录,这点和方法一的RANK()效果一致。
内容的提问来源于stack exchange,提问作者N.I.A
相关产品推荐
相关产品推荐

