запрос, который группирует по разным столбцам, включая разницу во времени - PullRequest
0 голосов
/ 01 октября 2018

У меня есть этот простой запрос, который возвращает количество игр в футбол за недели.

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 и 30-минутная разница между game_StartTime и game_EndTime...

вот так:

  • расписание № 1: младший, blue_red; blue_red; blue_green, 10/1, с 8:00 до 10: 30
  • расписание № 2: первокурсник, brown_purple; black_white;10/1, с 12:00 до 1: 00
  • расписание № 3: первокурсник, yellow_pink, 10/3, с 3:45 до 5: 00
  • расписание № 4: старший,blue_orange, 10/4, с 7:00 до 7:30
  • расписание № 5: Sophmore, pink_red;green_purple, 10/4, с 7:30 до 9:00

1 Ответ

0 голосов
/ 02 октября 2018

Что вам действительно нужно сделать, так это использовать комбинацию подходов к общим проблемам.

Сначала вам нужно использовать подход «Пробелы и острова», чтобы получить 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 с использованием решения «Пробелы и острова».Все игры в одной группе в один и тот же день, которые менее чем за 30 минут от предыдущего end до следующего start, будут иметь одинаковые значения GroupSequence.

Затем вы выбираете из этогоCTE, группировка по Group, Date и GroupSequence, использование метода GROUP_CONCAT для построения столбца Games и создание столбцов Time Range с помощью MIN(Start) и MAX(End).

...