我有一个简单的查询,返回了一周的足球比赛。
select game_group, game_name, game_date, game_StartTime, game_EndTime
from Games
where game_date between '10/1/2018' and '10/7/2018'
结果如下:
Junior | blue_red | 10/1 | 8:00 | 8:30
Junior | blue_red | 10/1 | 8:30 | 9:00
Junior | blue_green | 10/1 | 9:00 | 10:30
Freshman | brown_purple | 10/1 | 12:00 | 12:30
Freshman | black_white | 10/1 | 12:30 | 1:00
Freshman | yellow_pink | 10/3 | 3:45 | 5:00
Senior | blue_orange | 10/4 | 7:00 | 7:30
Sophmore | pink_red | 10/4 | 7:30 | 8:30
Sophmore | green_purple | 10/4 | 8:30 | 9:00
有没有一种方法可以操纵查询,以便按日期和时间对游戏进行分组?逻辑是,将同一组,同一日期,彼此之间或少于30分钟之内的游戏进行合并...因此分组因子为game_group,game_date和game_StartTime与game_EndTime之间的30分钟差。 ..
像这样:
答案 0 :(得分:1)
您实际需要做的是结合使用多种方法来解决常见问题。
您首先需要使用“空白和孤岛”方法来获得如下所示的CTE或派生表(使用缩写和部分示例数据来使其简短):
Group Game Date Start End GroupSequence
Fr B-P 10/1 12:00 12:30 1
Fr B-W 10/1 12:30 1:00 1
Fr Y-P 10/1 3:45 5:00 2
GroupSequence
是您在CTE中使用“缺口和离岛”解决方案计算的人工列。从前一个end
到后一个start
少于30分钟的同一组中同一天的所有游戏将共享相同的GroupSequence
。
然后,您从该CTE中选择,按Group
,Date
和GroupSequence
进行分组,并使用GROUP_CONCAT技术构建Games
列,并构建{ 1}}列,其中包含Time Range
和MIN(Start)
。