Это даст вам все недель с максимальной gameID
для каждого. Возвращенные строки будут упорядочены по weekNum
по возрастанию.
SELECT weekNum, MAX(gameID) AS lastGameOfWeek
FROM nflp_schedule
GROUP BY weekNum
ORDER BY weekNum ASC
Чтобы получить другие значения основаны на возвращаемый GameID является производным выше, вам нужно будет либо сделать подвыбор как условие фильтрации или объединения.
Это может выглядеть следующим образом (используя подзапрос):
SELECT gameID, weekNum, homeScore, visitorScore
FROM nflp_schedule
WHERE gameID IN (
SELECT MAX(gameID)
FROM nflp_schedule
GROUP BY weekNum
)
ORDER BY weekNum ASC
Или как это (используя соединение):
SELECT
n.gameID AS gameID,
n.weekNum AS weekNum,
n.homeScore AS homeScore,
n.visitorScore AS visitorScore
FROM nflp_schedule AS n
INNER JOIN (
SELECT MAX(gameID) AS maxGameID
FROM nflp_schedule
GROUP BY weekNum
) AS max
ON n.gameID = max.maxGameID
ORDER BY n.weekNum ASC
Вы заметите, что подзапрос используется в запросе с соединением выше выглядит очень аналогично подзапрос, который используется непосредственно в предложении WHERE в примере до этого. Это действительно просто способ применения «таблицы», созданной подзапросом, в качестве фильтра в основной таблице. Возможно, вам захочется проверить оба подхода, чтобы увидеть, что выполняется быстрее, учитывая ваши данные.
Это работает чудесно. Огромное спасибо. – enjoimark
Любой способ добавить другие значения в таблицу? Я хочу, чтобы он вытащил visitorScore и homeScore для этих соответствующих игровых идентификаторов ... Я добавил их, но, похоже, просто вытаскивает случайные значения. – enjoimark
@enjoimark Не использовать функции aggregate (i.e 'MAX()'). Если вы просто добавите другие столбцы без указания агрегации, вы получите непредсказуемые значения из любой из записей в этой группе. Я буду обновлять свой ответ с помощью другого подхода, который вам нужно предпринять, чтобы получать значения из конкретных записей, возвращаемых из этого запроса. –