You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:42:05