2016-05-31 19 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; 

??是指定行的排序列。

相關問題