Укажите, какую строку возвращать в SQLite Group By. - PullRequest
4 голосов
/ 18 мая 2010

Я столкнулся с небольшой проблемой. Я храню все версии всех документов в одной таблице. Каждый документ имеет уникальный идентификатор, и версия хранится в виде целого числа, которое увеличивается каждый раз, когда появляется новая версия.

Мне нужен запрос, который выберет только самую последнюю версию каждого документа из базы данных. Пока работает GROUP BY, похоже, что он сломается, если версии не будут вставлены в базу данных в порядке версии (т. Е. Требуется максимальный ROWID, который не всегда будет последней версией).

Обратите внимание, что последняя версия каждого документа, скорее всего, будет иметь другой номер (т. Е. Документ A имеет версию 3, а документ B - версию 6).

Я в своем уме, кто-нибудь знает, как это сделать (выбрать все документы, но вернуть только одну запись для каждого document_id, и что возвращаемая запись должна иметь самый большой номер версии)?

1 Ответ

6 голосов
/ 18 мая 2010

Вам необходимо выполнить выборку, чтобы найти максимальную версию, например,

Предположим, таблица называется docs

select t.*
   from docs t
       inner join ( select id, max(version) as ver from docs group by id ) as t2
          where t2.id = t.id and t2.ver = t.version
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...