Postgres:select n 个唯一的 ID 行

Postgres: select n unique rows for ID

使用 Postgres 我有一个场景,我需要在 sql 语句中为每个唯一 ID return 可变行数。

假设我有 table 个用户多年来拥有的汽车。

+----+----------+---------+-------+
| ID | make     | model   | type  |
+----+----------+---------+-------+
| 1  | toyota   | camry   | sedan |  
| 1  | ford     | mustang | coupe | 
| 1  | toyota   | celica  | coupe | 
| 1  | bmw      | z4      | coupe |
| 1  | honda    | accord  | sedan |
| 2  | buick    | marque  | sedan |
| 2  | delorean | btf     | coupe |
| 2  | mini     | cooper  | coupe |
| 3  | ford     | f-150   | truck |
| 3  | ford     | mustang | coupe |
| 1  | ford     | taurus  | sedan |
+--------+----------+-------+-----+

从这个table我只想return为每个拥有双门轿跑车的用户排两行,而忽略其余部分。

类似的东西。我还想保留空列,以便 ID 3 的第二个结果为空,因为只有一辆 coupe 类型的汽车。我也在使用限制,因为这必须 运行 AWS Reshift。所以,我不能使用很多功能。使用 SQL 服务器中的 Top 语句似乎很容易,但是由于 Redshift 限制和我缺乏知识,我不确定最好的方法。

+----+----------+---------+-------+
| ID | make     | model   | type  |
+----+----------+---------+-------+
| 1  | ford     | mustang | coupe | 
| 1  | toyota   | celica  | coupe | 
| 2  | delorean | btf     | coupe |
| 2  | mini     | cooper  | coupe |
| 3  | ford     | mustang | coupe |
| 3  |          |         |       |
+--------+----------+-------+-----+

非常感谢您的帮助。

据我所知,Redshift支持window functions:

select id, make, model, type
from (
  select id, make, model, type, 
         row_number() over (partition by id order by make) as rn
  from the_table
  where type = 'coupe'
) t
where rn <= 2
order by id, make;