0

我有一个 SQL 表,我在其中以格式保存包含DATE字段的记录。yyyy-mm-dd我正在尝试计算由月份范围定义的表分区的平均值,即我想按次年 8 月到 7 月之间的日期窗口对行进行分组,然后计算每个字段中的平均值分割。

由于数据可以无限增长,我怎样才能自动执行此操作,而不是使用
WHERE day BETWEEN ('1995-08-01' AND '1996-07-31' OR '1996-08-01' AND '1997-07-31')etc.. ?

表格中的样本数据

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

我想按足球赛季而不是年份对比赛进行分组。

4

1 回答 1

1

您可以将日期转移到新的一年,然后从该日期提取年份。

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

在此处输入图像描述

于 2020-04-14T08:47:41.553 回答