如果我有这张桌子:
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 raining
和1 = raining
我如何计算下雨多少次以及多少次开始?
我正在使用MySQL。
答案 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;
答案 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;
假设下雨是列名