我有一个包含两列的表:时间戳和整数值(让我们将这些列命名为date
和value
)。第二个值在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
答案 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 |