我正试图找到一种方法来计算值在有序列表中更改的次数。给定A, B, A, A, B, C, C
之类的序列,将有4个更改,忽略第一个。
我需要的是在COUNT(GROUP BY x)
之后应用的ORDER BY y
命令,但这不是有效的语法。有没有一种简单的方法可以在纯MySQL中实现这一点,或者我最好用Python迭代?
该表将按日期字段排序。例如:
+------------+-------+
| Date | Value |
+------------+-------+
| 2015-09-01 | A |
| 2015-09-02 | B | (change)
| 2015-09-03 | A | (change)
| 2015-09-05 | A |
| 2015-09-06 | B | (change)
| 2015-09-07 | C | (change)
| 2015-09-08 | C |
+------------+-------+
答案 0 :(得分:0)
<强>计划强>
- 按日期排序
- 计算滞后变量超过排序
- 计算变化(与滞后变量比较)
- 取max(更改)并减去一(for the first transition ..)
<强>查询强>
set @chgs := 0;
set @lag := null;
select max(chgs) - 1 as num_changes
from
(
select `Date`, `Value`,
@chgs := if(@lag = `Value`, @chgs,
if(@lag := `Value`, @chgs + 1, @chgs + 1)) as chgs
from sequence
order by `Date`
) calc
;
<强>输出强>
+-------------+
| num_changes |
+-------------+
| 4 |
+-------------+