SQL-запрос с датой и полем последовательности - PullRequest
0 голосов
/ 03 мая 2018

Я импортировал данные Retrosheet (база данных по бейсболу с 1952 года) в базу данных MySQL. Поле GAME_ID идентифицирует бейсбольный матч.

First 3 fields: home team
Next 8 fields: YYYYMMDD
Last field: game sequence for double-headers, triple-headers.

ATL199206230 = Игра в Атланте, сыгранная 23 июня - Первая игра с двойным заголовком ATL199206231 = Игра в Атланте, сыгранная 23 июня - Вторая игра с двойным заголовком

Поскольку мне требовалась дата для большинства моих запросов, я создал столбец GAME_DATE и проанализировал поле GAME_ID, чтобы обновить его. Я также создал поле GAME_SEQ для поля последовательности.

Допустим, я хочу запросить в моей таблице все данные с игровой датой, меньшей или равной игре, которая является первой игрой с двойным заголовком (ATL199206230).

SELECT * FROM games WHERE GAME_DATE <= ‘1992-06-23’.

Это не работает, потому что я не хочу получать данные из игры "ATL199206231".

Как я могу использовать GAME_SEQ в своем запросе?

SELECT * FROM games WHERE GAME_DATE <= ‘1992-06-23’ and GAME_SEQ = 0

Это тоже не сработает, потому что я бы хотел эту игру BOS199008231 (вторая игра с двойным заголовком в 1990 году)

Я думал о включении поля GAME_SEQ в часть времени «time».

Пример:

1992-06-23:00:00:00
1992-06-23:01:00:00

Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Если вы не хотите игр в этот день, используйте:

SELECT * FROM games WHERE GAME_DATE < '1992-06-23'

Или, возможно, вы намереваетесь:

WHERE GAME_DATE < '1992-06-23' OR
      (GAME_DATE < '1992-06-23' AND GAME_SEQ = 0)

MySQL должен делать правильные вещи с:

WHERE (GAME_DATE, GAME_SEQ) <= ('1992-06-23', 0)
0 голосов
/ 03 мая 2018

Вы можете использовать оператор case следующим образом:

SELECT * FROM games WHERE GAME_DATE <= ‘1992-06-23’ and GAME_SEQ = 
case when GAME_DATE  = ‘1992-06-23’  then 1 else 0 end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...