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