PostgreSQL列值取决于之前的行

时间:2016-03-16 20:29:37

标签: sql postgresql

我有一个包含五列的表格:iduser_codecreated_atABstartid只是一个键,user_code标识与该行关联的用户,created_at是时间戳,ABstart可以独立取值0或1.

我的目的是运行添加列AsBs的查询,该列按照created_at按升序对原始表进行排序,然后As给定行的值等于自上次user_code以来具有A = 1的{​​{1}}的前一行的数量(start = 1和{{1}的相同内容})。

示例输入:

Bs

示例输出:

B

1 个答案:

答案 0 :(得分:3)

您可以将COUNTOVER子句一起使用:

SELECT "id", "user_code", "created_at", "A", "B",
       COUNT(CASE WHEN "A" <> 0 THEN 1 END) 
          OVER (PARTITION BY "user_code" ORDER BY "id") AS As,
       COUNT(CASE WHEN "B" <> 0 THEN 1 END) 
          OVER (PARTITION BY "user_code" ORDER BY "id") AS Bs
FROM mytable

Demo here