如何在Distinct查询结果中获取最新日期的前10/20条数据?
解决SQL筛选最新日期前N条数据的问题
你的原语句存在两个问题导致SELECT TOP无效:一是别名位置错误(你把max_date给了表而不是窗口函数的结果),二是没有按最新日期排序就取Top,拿到的不是目标数据。以下是修正后的方案:
方法1:使用子查询
SELECT TOP 10 tfnumb, max_date FROM ( -- 先获取每个编号对应的最新日期 SELECT DISTINCT tfnumb, MAX(tfdate) OVER (PARTITION BY tfnumb) AS max_date FROM turfbase ) AS temp_result -- 按最新日期降序排序,确保取到的是最近的N条 ORDER BY max_date DESC;
方法2:使用CTE(公共表表达式)
如果觉得子查询可读性差,可以用CTE拆分逻辑:
WITH LatestRecord AS ( SELECT DISTINCT tfnumb, MAX(tfdate) OVER (PARTITION BY tfnumb) AS max_date FROM turfbase ) SELECT TOP 20 tfnumb, max_date FROM LatestRecord ORDER BY max_date DESC;
关键说明
- 必须先通过子查询/CTE得到每个
tfnumb的最新日期,再对这个结果集按max_date降序排序,之后用TOP N筛选,才能拿到日期最新的前N条数据。 - 原语句里的
from turfbase as max_date是错误的,应该把别名加在窗口函数的结果上,也就是MAX(tfdate) OVER (...) AS max_date。
内容的提问来源于stack exchange,提问作者Daniel CW Tan
相关产品推荐
相关产品推荐

