Простая проблема SQL (MySQL) - PullRequest
2 голосов
/ 03 февраля 2009

У меня есть этот запрос:

SELECT page.id, revision.title, revision.number
FROM page
    INNER JOIN revision ON page.id = revision.pageId

Который вернет что-то вроде:

"1"   "Page Version A"   "1"
"1"   "Page Version B"   "2"
"1"   "Page Version C"   "3"

Теперь я хочу вернуть только одну строку для каждой страницы с данными из последней (с наибольшим номером) ревизии. Если я сделаю:

SELECT page.id, revision.title, revision.number
FROM page
    INNER JOIN revision ON page.id = revision.pageId
GROUP BY page.id

Я получаю:

"1"   "Page Version A"   "1"

Но я хочу:

"1"   "Page Version C"   "3"

Есть идеи? Спасибо.

Ответы [ 4 ]

5 голосов
/ 03 февраля 2009

Добавить предложение WHERE, подобное

ГДЕ revision.number = (выберите max (число) из ревизии r, где r.pageId = page.id)

2 голосов
/ 03 февраля 2009

Если вы просто хотите выбрать одну запись, вы можете использовать ключевое слово «LIMIT» MySQL (аналогично MSSQL «TOP»)

например:

SELECT page.id, revision.title, revision.number
FROM page
    INNER JOIN revision ON page.id = revision.pageId

ORDER BY revision.number DESC
LIMIT 0, 1

Это упорядочит все ваши результаты, затем выберите лучший результат.

0 голосов
/ 03 февраля 2009

Если этот запрос вы будете выполнять много раз, я бы посоветовал создать представление, которое выберет самую последнюю редакцию для pageid:

create view LatestRevision
as 
Select pageid, max(number) from revision

тогда запрос будет

SELECT page.id, revision.title, revision.number
FROM page
    INNER JOIN revision ON page.id = revision.pageId
    INNER JOIN LatestRevision on revision.pageid = LatestRevision.pageid and revision.Number = LatestRevision.number
0 голосов
/ 03 февраля 2009
SELECT page.id, MAX(revision.number)
FROM page
INNER JOIN revision ON page.id = revision.pageId
GROUP BY page.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...