【问题标题】:Any better way to Return 1 value for multiple row in case when by window Function?如果使用窗口函数,有没有更好的方法为多行返回 1 个值?
【发布时间】:2023-03-20 03:20:02
【问题描述】:

这样的数据:

timestamp id  roas 
day 5     id1  1.3
day 4     id1  2.1
day 3     id1  1.9
day 2     id1  1.4
day 1     id1  3.0

我想获取第一天的数据,当所有行的 roas day 2,期望的结果:

timestamp id  roas  min_date
day 5     id1  1.3  day 2
day 4     id1  2.1  day 2
day 3     id1  1.9  day 2
day 2     id1  1.4  day 2
day 1     id1  3.0  day 2

目前,我使用:

, t2 as (select *, case when roas < = 1.5 then timestamp else null end as day_roas from t1)
select *, min(day_roas) over (partition by id) as min_date
from t2 

【问题讨论】:

  • 请注意,只需 min(CASE WHEN roas &lt;= 1.5 THEN timestamp END) 也可以,不需要额外的 t2 CTE。

标签: postgresql window-functions case-when


【解决方案1】:

您可以使用FILTER clause with your window function:

SELECT *, min(timestamp) FILTER (WHERE roas <= 1.5) OVER (PARTITION BY id) FROM t1

(online demo)

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    相关资源
    最近更新 更多