【问题标题】:case end / self-join postres sqlcase结束/自加入postgresql
【发布时间】:2023-02-01 22:42:04
【问题描述】:

我正在尝试处理同一张表中的数据。

输入:
桌子

id sort value   
1   1     1   
2   1     8    
3   2     0    
4   1     2    

我想要实现的是为每个 id 获取所有等于其排序的值的第一个遇到的值,并按 id 排序。

输出

桌子

id sort value new  
1   1     1    1    
2   1     8    1      
3   2     0    0      
4   1     2    1   

我试图自己加入表格,但我经常找不到关系。我尝试使用 case 语句,但我不知道如何连接到同一个表,我得到同样的错误,找不到关系。

【问题讨论】:

  • 对不起,有错误,谢谢你让我知道

标签: sql postgresql


【解决方案1】:

SQL 的美妙之处在于,许多需求(包括您的)可以用非常相似的方式详细描述,它们最终被编码:

with t(id, sort, value   ) as (values
(1,   1,     1),   
(2,   1,     8),    
(3,   2,     0),    
(4,   1,     2)
)
select t.*
     , first_value(value) over (partition by sort order by id) as "new"
from t
order by id
id sort value new
1 1 1 1
2 1 8 1
3 2 0 0
4 1 2 1

fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2021-09-01
    • 2021-04-02
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多