我想知道是否可以计算记录中值之间的更改次数
例如我有以下数据
| radio | name | state | timestamp |
|-------|------|-------|---------------------|
| 1 | AP1 | down | 2013-03-07 10:00:00 |
| 1 | AP1 | down | 2013-03-07 10:15:00 |
| 1 | AP1 | up | 2013-03-07 10:30:00 |
| 1 | AP1 | down | 2013-03-07 10:45:00 |
| 1 | AP1 | pend | 2013-03-07 11:00:00 |
| 1 | AP1 | pend | 2013-03-07 11:15:00 |
| 1 | AP1 | pend | 2013-03-07 11:30:00 |
| 1 | AP1 | pend | 2013-03-07 11:45:00 |
我需要进行一个执行以下技巧的查询
| name | S1 | S2 | S3 | S4 | (other time range) |
| AP1 | A | A | B | A | C |
\ / \ / \ /
DETECT DETECT DETECT
\ \ /
\------- \ /
COUNT = 3 <-- this is the number i want
到目前为止,我被困在基于计数的 SQL 中。
SELECT radio, name, state, COUNT(state) AS count FROM data
WHERE timestamp BETWEEN '2013-03-07 10:00:00' AND '2013-03-07 11:00:00'
GROUP BY radio, name, channel
结果将是
| radio | name | state | count |
|-------|------|-------|-------|
| 1 | AP1 | down | 3 |
| 1 | AP1 | up | 1 |
| 1 | AP1 | pend | 1 |
所以现在的结果将是 3 行,也就是 3 状态变化,但后来我意识到这不是真的,因为这个数字只会告诉我不同状态名称的数量,在这种情况下是 3。
所以我的问题是这在 SQL 中是可能的,还是我需要将结果集拉入循环并通过外部脚本或视图检测更改。