-1

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

我如何将这些掉落的数量计算为 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
4

2 回答 2

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

结果

| count_drops |
|-------------|
|           2 |
于 2017-10-10T07:00:28.290 回答
0

您的意思是在您说“行”的地方说“列”吗?假设是这样,您可能想要编辑您的问题。

至于问题本身:

假设您连续有一个以上的零,并且只想计算前面有更高值的零,您可能可以调整这个现有的答案,了解如何检测 MySQL 中的先前值。

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

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

于 2017-10-10T05:23:30.017 回答