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

如何在smallint类型Taxyear列筛选最近10个年度的数据

获取最近10个Taxyear的正确查询方法

原查询错误原因

你之前的查询之所以返回所有年份,是因为GROUP BY Taxyear会将每个年份单独分组,此时HAVING子句里的MAX(taxyear)就是当前分组的年份本身,条件等价于taxyear between taxyear-10 and taxyear,所有年份都满足这个条件,自然会返回所有结果。

正确查询语句

以下几种方法都能实现需求,自动获取最新年份及其过去10年的数据:

方法1:子查询直接筛选

SELECT DISTINCT Taxyear
FROM Property
WHERE Taxyear >= (SELECT MAX(Taxyear) FROM Property) - 10
ORDER BY Taxyear;
  • 先用子查询获取表中最新的Taxyear
  • 筛选年份大于等于「最新年份-10」的记录
  • DISTINCT用于去重(因为表中可能存在多个同一年份的记录)
  • ORDER BY确保结果按年份升序排列

方法2:CTE定义最新年份后筛选

WITH MaxTaxYear AS (
    SELECT MAX(Taxyear) AS LatestYear
    FROM Property
)
SELECT DISTINCT p.Taxyear
FROM Property p
CROSS JOIN MaxTaxYear m
WHERE p.Taxyear >= m.LatestYear - 10
ORDER BY p.Taxyear;
  • 用CTE(公共表表达式)单独计算最新年份,逻辑更清晰
  • 通过交叉连接将最新年份应用到所有行的筛选条件中
  • 同样通过DISTINCT去重,ORDER BY排序

说明

如果某些年份在表中不存在(比如2020年没有数据),上述查询只会返回实际存在的年份,不会生成空的年份记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:05:28