Сгруппировать в MySQL - PullRequest
       2

Сгруппировать в MySQL

3 голосов
/ 16 ноября 2011

У меня есть таблица следующей структуры:

ID | COMPANY_ID | VERSION | TEXT
---------------------------------
 1 |     1      |    1    | hello
 2 |     1      |    2    | world
 3 |     2      |    1    |  foo

есть ли способ получить только самую последнюю версию записей, т.е. я бы хотел, чтобы в результате были установлены идентификаторы 2 и 3?

Ответы [ 3 ]

3 голосов
/ 16 ноября 2011

Я уверен, что есть лучшие способы, но я склонен использовать этот тип запроса:

SELECT *
FROM
    (SELECT * FROM test ORDER BY VERSION DESC) AS my_table
GROUP BY COMPANY_ID

Создает этот набор результатов:

ID | COMPANY_ID | VERSION | TEXT
---------------------------------
 2 |     1      |    2    | world
 3 |     2      |    1    |  foo
3 голосов
/ 16 ноября 2011

Попробуйте это:

SELECT *
FROM (
    SELECT company_id, MAX(version) maxVersion
    FROM table
    GROUP BY company_id ) as val
JOIN table t ON (val.company_id = t.company_id AND t.version = val.maxversion)
0 голосов
/ 16 ноября 2011

Если ваши идентификаторы заказаны (более новая версия, если выше идентификатор):

SELECT t.*, a.maxversion
FROM (
  SELECT MAX(id) maxid, MAX(version) maxversion
  FROM table
  GROUP BY company_id
) a
INNER JOIN table t
ON a.maxid = t.id

Однако, если ваши идентификаторы не упорядочены должным образом, вам нужно использовать следующий запрос:

SELECT t.*
FROM (
  SELECT company_id, MAX(version) maxversion
  FROM table
  GROUP BY company_id
) v
INNER JOIN table t
ON v.company_id = t.company_id
AND v.maxversion = t.version

(при условии UNIQUE ограничения / индекса на (company_id, version))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...