【问题标题】:query that groups by different columns including time difference按不同列(包括时差)分组的查询
【发布时间】:2019-03-06 21:22:54
【问题描述】:

我有一个简单的查询,它返回一周的足球比赛。

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 分钟差异。 ..

像这样:

  • 时间表 #1 是:Junior, blue_red;blue_red;blue_green, 10/1, 8:00 to 10:30
  • schedule #2 是:新生,brown_purple;black_white; 10/1, 12:00 到 1:00
  • 时间表 #3 是:新生,yellow_pink,10 月 3 日,3:45 到 5:00
  • 时间表 #4 是:Senior, blue_orange, 10/4, 7:00 to 7:30
  • schedule #5 是:Sophmore,pink_red; green_purple,10 月 4 日,7:30 至 9:00

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 这听起来像是典型的群体和岛屿问题。它已经被问了数百次了。
  • @Brian 我尝试了一堆不同的“分组”想法,但我无法在需要的时间进行组合
  • @SeanLange 团体和岛屿?也许我使用了错误的术语进行搜索,我以前从未听说过。我会试一试,谢谢。
  • 我的意思是说“差距和岛屿”。 :D

标签: sql-server sql-server-2012 group-concat gaps-and-islands


【解决方案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 中进行选择,按 GroupDateGroupSequence 分组,使用 GROUP_CONCAT 技术构建 Games 列,并使用 Time Range 列构建 MIN(Start)MAX(End)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多