Count 在 table 中更改值的次数

Count No of times a value changed in a table

我有一个table这样的

uid  key   value
---------------
125 'saf'  True
152 'asd'  False
152 'asd'  True
162 'asd' False
162 'asd' False

我需要从上面获取更改密钥的次数 table。

例如键 'asd' 输出:

uid  key   count
---------------
152 'asd'  1
162 'asd'  0

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;

?? 是指定行顺序的列。