计数在表中更改值的次数

时间:2016-05-31 10:33:23

标签: sql amazon-redshift

我有一张这样的表

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

1 个答案:

答案 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;

??是指定行排序的列。