MySQL: 如何统计偏差数?

MySQL: How to count the number of deviations?

我有一个包含两列的 table:时间戳和整数值(我们将它们命名为 datevalue)。第二个值在 0 和 ~290 之间波动,然后回到 0,所以在图表上它看起来像一个波浪(详情查看 on screenshot).

如何将集合中这些掉落的数量计数为 0?

预期结果是从高点到零的下降次数(如图所示)。 MySQL 版本为 5.5.37-0+wheezy1.

数据样本:

data                                  value
2017-10-10 00:00:00                   270
2017-10-10 00:00:01                   270
2017-10-10 00:00:02                   270
2017-10-10 00:00:03                   265
2017-10-10 00:00:04                   263
2017-10-10 00:00:05                   184
2017-10-10 00:00:06                   87
2017-10-10 00:00:07                   23
2017-10-10 00:00:08                   0
2017-10-10 00:00:09                   0
2017-10-10 00:00:10                   0
2017-10-10 00:00:11                   0
2017-10-10 00:00:12                   24
2017-10-10 00:00:13                   87
2017-10-10 00:00:14                   189
2017-10-10 00:00:15                   241
2017-10-10 00:00:16                   267
2017-10-10 00:00:17                   267
2017-10-10 00:00:18                   265
2017-10-10 00:00:19                   266

你说 "rows" 的地方是要说 "columns" 吗?假设是这样,您可能想要编辑您的问题。

至于问题本身:

假设您在一行中有多个零并且想要计算前面有更高值的零,您可能可以调整这个关于如何检测先前值的现有答案在 MySQL.

很抱歉只提供 link 作为答案 -- 这将是一条评论,但我还没有发表评论的资格。

SQL Fiddle

查看此工作

MySQL 5.6 架构设置:

CREATE TABLE Table1
    (`ts` datetime, `value` int)
;

INSERT INTO Table1
    (`ts`, `value`)
VALUES
    ('2017-01-01 00:00:00', 270),
    ('2017-01-01 00:00:00', 270),
    ('2017-01-01 00:00:00', 270),
    ('2017-01-01 00:00:00', 0),
    ('2017-01-01 00:00:00', 270),
    ('2017-01-01 00:00:00', 270),
    ('2017-01-01 00:00:00', 0)
;

查询 1:

select count(*) as count_drops
from (
    select
        @prev  as previous
      , t1.ts
      , @prev := t1.value as current
    from table1 t1
    cross join (select @prev := null x) var
    ) as d
where current = 0 and previous > 0

Results:

| count_drops |
|-------------|
|           2 |