Используя Postgres 9.3, я пытаюсь подсчитать количество смежных дней определенного типа погоды. Если мы предположим, что мы имеем регулярные временные ряды и метеосводки:Postgres windowing (определить смежные дни)
date|weather
"2016-02-01";"Sunny"
"2016-02-02";"Cloudy"
"2016-02-03";"Snow"
"2016-02-04";"Snow"
"2016-02-05";"Cloudy"
"2016-02-06";"Sunny"
"2016-02-07";"Sunny"
"2016-02-08";"Sunny"
"2016-02-09";"Snow"
"2016-02-10";"Snow"
Я хочу что-то рассчитывать смежные дни той же погоды. Результаты должны выглядеть следующим образом:
date|weather|contiguous_days
"2016-02-01";"Sunny";1
"2016-02-02";"Cloudy";1
"2016-02-03";"Snow";1
"2016-02-04";"Snow";2
"2016-02-05";"Cloudy";1
"2016-02-06";"Sunny";1
"2016-02-07";"Sunny";2
"2016-02-08";"Sunny";3
"2016-02-09";"Snow";1
"2016-02-10";"Snow";2
Я стучал голову на этом некоторое время, пытаясь использовать оконные функции. Поначалу кажется, что это должно быть без проблем, но потом я узнал, что это намного сложнее, чем ожидалось.
Вот что я пытался ...
Select date, weather, Row_Number() Over (partition by weather order by date)
from t_weather
было бы лучше просто легче сравнивать текущую строку к следующему? Как бы вы это сделали, сохранив счет? Любые мысли, идеи или даже решения были бы полезны! -Kip
не могли бы вы просто сделать подсчет (дата) группы по погоде – hd1