SQL WHERE 子句返回超过 MAX() 值

问题描述 投票:0回答:1

我有一个包含 500 万条记录的表。有一个字段存储记录相关年份的整数值,值范围为 2010-2024 年。我正在尝试思考一个表达式,以便获得包含 5 个最高年份的所有记录的结果表。所以基本上,任何带有 2020、2021、2022、2023 或 2024 的记录。我可以在 where 语句中显式定义它,但是有没有办法不必使用 MAX() 对此进行硬编码,然后将其放入 where 中与 MAX() - 1、MAX() - 2 等一起声明?

虽然 MAX() 返回单个值;我想要显示最大值和其他最高 4 个值的所有记录。

sql max
1个回答
0
投票
SELECT  *
FROM    mytable
WHERE   year >
        (
        SELECT  MAX(year) - 5
        FROM    mytable
        )

如果您在

mytable.year

上有索引,将对性能有很大帮助

请注意,这回答了所提出的问题。 “具有最高 5 年记录的所有记录”是一个相当特殊的要求。通常,人们想要相对于当前日期 5 年前的记录。在这种情况下,它将是:

SELECT  *
FROM    mytable
WHERE   year > EXTRACT(YEAR FROM NOW()) - 5

(假设 PostgreSQL)

© www.soinside.com 2019 - 2024. All rights reserved.