【发布时间】:2021-12-03 02:23:54
【问题描述】:
我希望有人可以提供帮助。假设我有这张桌子
| sto_id | pro_id | o_date | d_date |
|---|---|---|---|
| 38 | 111 | 2021-04-01 | |
| 30 | 111 | 2021-04-10 | 2021-04-10 |
| 30 | 222 | 2021-04-15 | |
| 30 | 222 | 2021-04-18 | 2021-04-19 |
| 30 | 333 | 2021-04-20 |
而我想看到的结果是
| first_sto_id | pro_id | min_o_date | first_d_date |
|---|---|---|---|
| 38 | 111 | 2021-04-01 | |
| 30 | 222 | 2021-04-15 | 2021-04-19 |
| 30 | 333 | 2021-04-20 |
因此,如果 sto_id 为 30 并且 d_date 为空,我想要查看此 pro_id 的下一个 d_date(如果可用)。如果 sto_id 不是 30 那么 d_date 即使它是空的。
我试过这个:
select
first_value(sto_id) OVER (PARTITION BY pro_id ORDER BY o_date ASC) as first_sto_id,
pro_id,
min(o_date) OVER (PARTITION BY pro_id ORDER BY o_date ASC) as min_o_date,
case when sto_id='30' then min(d_date) OVER (PARTITION BY pro_id ORDER BY o_date ASC)
else first_value(d_date) OVER (PARTITION BY pro_id ORDER BY o_date ASC) end as first_d_date
from tab1
但我没有得到我需要的结果。这里还有fiddle
有什么建议吗?? 提前非常感谢。
【问题讨论】:
标签: sql case snowflake-cloud-data-platform window-functions min