MySQL:如何计算偏差的数量?

时间:2017-10-10 05:09:11

标签: mysql deviation

我有一个包含两列的表:时间戳和整数值(让我们将这些列命名为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

2 个答案:

答案 0 :(得分:0)

您的意思是说"列"在哪里你说"行"?假设如此,您可能想要编辑您的问题。

至于问题本身:

假设你连续有多个零,并希望计数零前面有一个更高的值,你可以调整现有的答案,探讨如何检测MySQL中的先前值。

https://stackoverflow.com/a/20849340/4315597

很抱歉只提供一个链接作为答案 - 这将是一条评论,但我还没有发表评论的声誉。

答案 1 :(得分:0)

请参阅此处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 |