如何计算MYSQL上的布尔转换?

时间:2016-12-23 18:26:31

标签: mysql select count boolean transitions

如果我有这张桌子:

Timestamp            | Raining
---------------------|----------
2016-11-01 8:52:43   | 1
2016-11-01 10:47:39  | 1
2016-11-01 15:19:52  | 0
2016-11-01 15:57:32  | 0
2016-11-03 7:45:01   | 1
2016-11-03 8:10:12   | 0
2016-11-03 9:51:36   | 1
2016-11-03 14:28:42  | 1
2016-11-03 15:14:30  | 0
2016-11-03 18:08:26  | 0

0 = not raining1 = raining

的位置

我如何计算下雨多少次以及多少次开始?

我正在使用MySQL。

3 个答案:

答案 0 :(得分:0)

您可以使用会话变量找到最后一个值,找出与当前值的差异并采用相应的count

--stopped =>  1 -> 0, diff = -1
--started =>  0 -> 1, diff = 1

select count(case when diff > 0 then 1 end) rain_started,
 count(case when diff < 0 then 1 end) rain_stopped
from 
(select raining, raining - @lr diff, @lr := raining lr
from (select * from my_table order by timestamp) t,
 (select @lr := null) x
) x;

SQLFiddle

答案 1 :(得分:0)

我不知道MySQL是否会处理这个问题,而且我猜这不会太有效,但它似乎在SQLServer中完成了这项工作。根据需要更改表/列名称。

select RainingNow, Count(*) ChangeCount
FROM (
    Select t1.TheTime, t1.Raining RainingNow, nr.Raining RainingNext
    FROM RainTable t1
    INNER JOIN (
        select TheTime ThisTime, (select min(TheTime) from RainTable where TheTime > rt.TheTime) NextTime
        from RainTable rt
        ) n on t1.TheTime = n.ThisTime
    INNER JOIN RainTable nr on n.NextTime = nr.TheTime
    where t1.Raining <> nr.Raining
) as T2
Group By RainingNow

答案 2 :(得分:-1)

Select count(*)  from table_name where raining=1;

假设下雨是列名