我有一张这样的表
uid key value
---------------
125 'saf' True
152 'asd' False
152 'asd' True
162 'asd' False
162 'asd' False
我需要从上表中获取密钥的更改次数。
例如,对于密钥' asd' 输出:uid key count
---------------
152 'asd' 1
162 'asd' 0
答案 0 :(得分:2)
SQL表代表无序集。所以,你的问题确实没有意义,因为它暗示了行的某种排序,并且没有明显的排序。我假设某些列有此信息(例如自动递增id
或创建日期)。
您可以使用lag()
,然后使用条件总和。在RedShift中,我认为这看起来像:
select uid, key,
sum(case when prev_value is null or prev_value <> value then 1 else 0 end) as num_changes
from (select t.*,
lag(value) over (partition by uid, key order by ??) as prev_value
from t
) t
group by uid, key;
??
是指定行排序的列。