T-SQL:按组更改属性的数量

时间:2018-06-07 15:08:51

标签: sql sql-server tsql count

我正在寻找一种方法来计算特定群体(如客户)属性的更改次数。

数据

grep -o 'how.*' file.txt

结果

Customer  |  Attribute
A         |  x
A         |  x
A         |  y
A         |  x
A         |  y
B         |  x
B         |  y
B         |  x
C         |  x

我尝试使用 DISTINCT ,但是这并没有发现客户A的情况,其中值会更改回其初始值。

非常感谢

1 个答案:

答案 0 :(得分:2)

表表示无序集。所以,我假设您有另一列指定了排序,我将用?表示。

然后您可以使用lag()(或lead()):

select customer,
       sum(case when prev_attribute <> attribute then 1 else 0 end) as num_changes
from (select t.*, lag(attribute) over (partition by customer order by ?) as prev_attribute
      from t
     ) t
group by customer;