【发布时间】:2020-10-22 18:50:13
【问题描述】:
我有一张这样的桌子:
create table cars (
id serial primary key,
au_rating integer,
year integer
);
insert into cars (au_rating, year) VALUES
(1,2019),
(1,2020),
(1,2016),
(2,2016),
(2,2019),
(3,2020),
(3,2018),
(3,2017),
(3,2019),
(3,2020),
(0,2020),
(0,2006)
;
我想使用JOIN LATERAL(类似于:https://stackoverflow.com/a/37862028/1002814)在每个组中选择 N 个第一个元素:
SELECT cars_outer.id, cars_top.au_rating, cars_top.year
FROM cars cars_outer
JOIN LATERAL (
SELECT * FROM cars cars_inner
WHERE cars_inner.au_rating = cars_outer.au_rating
ORDER BY ABS(cars_inner.year - 2019)
LIMIT 2
) cars_top on true
ORDER BY cars_outer.au_rating DESC
但是,由于我只希望每组 au_rating 最多包含 2 行,因此我为横向连接提供了 LIMIT 2,但它似乎被忽略了 - 为什么?
【问题讨论】:
-
顺便说一句
join lateral (...) on true等于cross join lateral (...)
标签: sql postgresql select greatest-n-per-group