SQL 查询中的日期范围分组
Group range of dates in SQL query
我有一个 SQL table,其中我以 yyyy-mm-dd
格式保存了一条包含 DATE
字段的记录。我正在尝试计算由月份范围定义的 table 分区的平均值,即我想按 window 日期在下一年的八月和七月之间对行进行分组,然后计算每个分区中字段的平均值。
我怎样才能自动执行此操作,而不是使用
WHERE day BETWEEN ('1995-08-01' AND '1996-07-31' OR '1996-08-01' AND '1997-07-31')
等等,
既然数据可以无限增长?
示例数据来自 table
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
我有一个 SQL table,其中我以 yyyy-mm-dd
格式保存了一条包含 DATE
字段的记录。我正在尝试计算由月份范围定义的 table 分区的平均值,即我想按 window 日期在下一年的八月和七月之间对行进行分组,然后计算每个分区中字段的平均值。
我怎样才能自动执行此操作,而不是使用
WHERE day BETWEEN ('1995-08-01' AND '1996-07-31' OR '1996-08-01' AND '1997-07-31')
等等,
既然数据可以无限增长?
示例数据来自 table
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