2016-05-31 17 views
0

改变的值我有一个表像这样没有计数的时间在表中

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

您需要一个指定排序的列。 。 。创建日期或ID或其他内容。 SQL表格表示*无序*集合。 –

回答

2

SQL表代表无序集。所以,你的问题并没有真正意义,因为它意味着某些行的排序,并没有明显的顺序。让我假设某列有这个信息(比如说自动递增的id或创建日期)。

您可以使用lag(),然后加上一个条件和。在红移,我觉得这个样子:

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; 

??是指定行的排序列。

相关问题