选择语句中的更新语句

时间:2021-06-08 20:03:09

标签: sql postgresql sql-update with-statement case-when

我正在尝试编写一个查询,在该查询中我根据其他条件更新计数器。例如:

with table 1 as (select *, count from table1)

select box_type, 
case when box_type = lag(box_type) over (order by time) 
then 
  count, update table1 set count = count + 1
else
  count
end as identifier

这是我正在尝试做的基本要点。我想要一个看起来像这样的表:

<头>
box_type 标识符
1
1
1
中等 2
中等 2
3
3
4

我只想在每次 box_type 更改时增加该标识符值

谢谢!

1 个答案:

答案 0 :(得分:0)

您的问题仅在您有一列用于排序的情况下才有意义。让我假设存在这样一个列——根据您的代码,我将其命名为 time

然后,您可以使用 lag() 和累积总和:

select t1.*,
       count(*) filter (where box_type is distinct from prev_box_type) over (order by time) as count
from (select t1.*,
             lag(box_type) over (order by time) as prev_box_type
      from table1 t1
     ) t1
相关问题