Группировать диапазон дат в запросе SQL - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть таблица SQL, в которой я сохраняю запись, содержащую поле DATE, в формате yyyy-mm-dd. Я пытаюсь вычислить среднее значение по разделам таблицы, определяемым диапазоном месяцев, т.е. я хочу сгруппировать строки по окну дат между августом и июлем следующего года, а затем вычислить среднее значение поля в каждом раздел.

Как я могу сделать это автоматически, вместо использования WHERE day BETWEEN ('1995-08-01' AND '1996-07-31' OR '1996-08-01' AND '1997-07-31') др c .., поскольку данные могут расти бесконечно?

Пример данных из таблицы

div date                    hometeam        awayteam    fthg    ftag
E0  2017-04-17 00:00:00.000 Middlesbrough   Arsenal     1       2
E0  2017-04-16 00:00:00.000 Man United      Chelsea     2       0
E0  2017-04-16 00:00:00.000 West Brom       Liverpool   0       1
E0  2017-04-15 00:00:00.000 Crystal Palace  Leicester   2       2
E0  2017-04-15 00:00:00.000 Everton         Burnley     3       1

Я хочу сгруппировать матчи по футбольному сезону, а не по году.

1 Ответ

1 голос
/ 14 апреля 2020

Вы можете перенести дату на новый год, а затем извлечь год из этой даты.

SELECT EXTRACT(year from DATE_ADD(CAST(dt AS date), interval 5 month)) as season

Чтобы лучше это понять, я подготовил пошаговый запрос

SELECT dt, 
  DATE_ADD(CAST(dt AS date), interval 5 month) as shifted_dt, 
  EXTRACT(year from DATE_ADD(CAST(dt AS date), interval 5 month)) as season
FROM UNNEST(['1995-08-01', '1996-07-31', '2017-04-16', '1996-08-01', '1997-07-31']) as dt

enter image description here

...