我有一个SQL表,其中以DATE
格式保存包含yyyy-mm-dd
字段的记录。我正在尝试计算由月份范围定义的表分区的平均值,即我想按明年八月至七月之间的日期窗口对行进行分组,然后计算每个字段中的平均值分区。
如何自动执行此操作,而不是使用WHERE day BETWEEN ('1995-08-01' AND '1996-07-31' OR '1996-08-01' AND '1997-07-31')
等。,因为数据可以无限增长?
表中的样本数据
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
我想按足球季节而不是年份分组比赛。
您可以将日期移至新的一年,然后从该日期中提取年份。
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