2016-12-23 6 views
0

Если у меня есть эта таблица:Как подсчитать логические переходы на MYSQL?

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

Укажите желаемый результат. – Strawberry

ответ

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

Предполагая, что дождь это имя столбца

+0

Если не попробовать raining = '1' –

+0

Ваш выбор приносит мне все время, которое идет дождь. Я просто хочу подсчитать время, которое изменяется от 0 до 1 или от 1 до 0. В любом случае, спасибо. – SnowBG

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

+0

ОТПРАВЛЯЕТ ВАС mr @ Gurwinder-Singh. Но это не сработает. Я думаю, что это произошло после первого предложения «от». – SnowBG

+0

@Strawberry Вы правы. обновленный – GurV

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