我有一个包含五列的表格:id
,user_code
,created_at
,A
,B
和start
。 id
只是一个键,user_code
标识与该行关联的用户,created_at
是时间戳,A
,B
和start
可以独立取值0或1.
我的目的是运行添加列As
和Bs
的查询,该列按照created_at
按升序对原始表进行排序,然后As
给定行的值等于自上次user_code
以来具有A = 1
的{{1}}的前一行的数量(start = 1
和{{1}的相同内容})。
示例输入:
Bs
示例输出:
B
答案 0 :(得分:3)
您可以将COUNT
与OVER
子句一起使用:
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