[英]Row number over partition by usage
我想根据周列过滤下表,但仅当年周组合为最大值时。
在下面的示例中,我希望我的 output 仅包含 2022 年和第 1 周的 select 行,因为这是最新的年周组合。
我正在考虑在分区依据上使用行号,但没有成功。
Car colour year week
aaa red 2021 52
aaa black 2021 51
bbb red 2022 1
bbb yellow 2022 1
来自 Oracle 12,您可以使用:
SELECT *
FROM table_name
ORDER BY year DESC, week DESC
FETCH FIRST ROW WITH TIES;
或者,在早期版本中,您可以使用:
SELECT car, colour, year, week
FROM (
SELECT t.*,
RANK() OVER (ORDER BY year DESC, week DESC) AS rnk
FROM table_name t
)
WHERE rnk = 1;
其中,对于示例数据:
CREATE TABLE table_name (Car, colour, year, week) AS
SELECT 'aaa', 'red', 2021, 52 FROM DUAL UNION ALL
SELECT 'aaa', 'black', 2021, 51 FROM DUAL UNION ALL
SELECT 'bbb', 'red', 2022, 1 FROM DUAL UNION ALL
SELECT 'bbb', 'yellow', 2022, 1 FROM DUAL;
两者都是 output:
车 颜色 年 星期 bbb 红色的 2022年 1个 bbb 黄色 2022年 1个
db<> 在这里摆弄
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.