【发布时间】:2021-02-23 20:11:19
【问题描述】:
我正在尝试为每个用户显示第一个和第五个 order_id。
表格如下:
+----------+-----------+-------------------+
| Order_ID | Client_ID | Datetime |
+----------+-----------+-------------------+
| 1 | 1 | YYYYMMDD HH:MM:SS |
+----------+-----------+-------------------+
| 2 | 1 | YYYYMMDD HH:MM:SS |
+----------+-----------+-------------------+
| 3 | 2 | YYYYMMDD HH:MM:SS |
+----------+-----------+-------------------+
我是这样写的:
select
t.client_id,
t.order_id as first_order,
t2.order_id as fifth_order,
t.datetime as first_dt,
t2.datetime as fifth_dt,
from
(
select o.client_id, o.order_id, o.datetime,
row_number() over(partition by o.client_id order by o.datetime) as rn
from "OhMyTable" as o
) as t
left join
(
select o.client_id, o.order_id, o.datetime,
row_number() over(partition by o.client_id order by o.order_id) as rn
from "OhMyTable" as o
order by o.order_id
) as t2
on t.client_id = t2.client_id
where t.rn = 1 and t2.rn = 5
但我希望看到那些下了第一单但没有五分之一的客户。应该有NULL,但我不明白怎么做。 :c
【问题讨论】:
标签: sql postgresql pivot left-join greatest-n-per-group