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

SQL Server中如何非硬编码获取年份字段前5大值的所有记录

在SQL Server中获取存在的前5大年份的所有记录

方法1:使用窗口函数DENSE_RANK()

这种方式先给所有实际存在的年份按降序排名,再筛选排名前5的年份对应的所有记录,能确保只取真实存在的年份:

WITH YearRanks AS (
    SELECT DISTINCT 
        YearColumn,  -- 替换成你实际的年份字段名
        DENSE_RANK() OVER (ORDER BY YearColumn DESC) AS YearRank
    FROM YourTableName  -- 替换成你的表名
)
SELECT t.*
FROM YourTableName t
JOIN YearRanks yr ON t.YearColumn = yr.YearColumn
WHERE yr.YearRank <= 5;

DENSE_RANK()会给每个不同的年份分配连续的排名,不会因为年份缺失出现跳号,完美匹配你要的「实际存在的最高5个年份」需求。

方法2:使用TOP 5子查询+IN

这种写法更简洁,先通过子查询提取前5个最大的不同年份,再用IN筛选主表记录:

SELECT *
FROM YourTableName  -- 替换成你的表名
WHERE YearColumn IN (
    SELECT TOP 5 DISTINCT YearColumn  -- 替换成你实际的年份字段名
    FROM YourTableName
    ORDER BY YearColumn DESC
);

性能优化建议

因为你的表有500万条记录,建议给年份字段YearColumn创建非聚集索引,这样两种方法都能避免全表扫描,大幅提升查询效率。

内容的提问来源于stack exchange,提问作者kgs_doc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:22:08