Выбор последней версии записи на другом языке из базы данных SQL - PullRequest
2 голосов
/ 24 февраля 2011

Есть ли способ сделать это в одном запросе sql?Я хотел бы получить самую новую (версию) той же записи на всех доступных языках.

Моя таблица и пример данных:

ID  |  Index  |  Version  |  Language  | ...
------------------------------------------------
1        1          1            1         test1
2        1          2            1         test2
3        2          1            1         test3
4        2          1            2         test4
5        2          1            3         test5
6        2          2            3         test6
7        3          1            1         test7
8        3          1            2         test8
  • Идентификатор является уникальным идентификатором
  • Индекс уникален для любой записи в базе данных, что означает, что все временные версии иязыковая версия той же статьи / записи имеет тот же индекс.
  • Версия, очевидно, является номером версии.1 - первая версия, и любое большее число обычно новее.
  • Язык - это номер языковой версии записи / статьи.

Я действительно не могу придумать, как получитьэто в одном запросе.Но, может быть, это выполнимо?

Я хотел бы получить что-то вроде этого:

ID  |  Index  |  Version  |  Language  | ...
------------------------------------------------
2        1          2            1         test2
3        2          1            1         test3
4        2          1            2         test4
6        2          2            3         test6
7        3          1            1         test7
8        3          1            2         test8

test1 вышел, потому что test2 на том же языке, и более новый
test5 вышел, потому что test6новее на том же языке

Решено

SELECT T1.* FROM entry_view T1 
LEFT JOIN entry_view T2 ON (T1.version < T2.version AND T1.id_language = T2.id_language AND T1.`index` = T2.`index`)
WHERE T2.ID IS NULL

Ответы [ 3 ]

4 голосов
/ 24 февраля 2011
    SELECT T1.ID, T1.Index, T1.Version, T1.Language FROM Table T1 
LEFT JOIN Table T2 ON (T1.ID < T2.ID AND T1.Language = T2.Language) 
WHERE T2.ID IS NULL

Редактировать: я предположил, что идентификаторы увеличивались, и последний будет последним.

возможно попробуйте это:

SELECT T1.ID, T1.Index, T1.Version, T1.Language FROM Table T1 
LEFT JOIN Table T2 ON (T1.Version < T2.Version AND T1.Language = T2.Language)
 WHERE T2.ID IS NULL
1 голос
/ 24 февраля 2011
SELECT t.*
FROM atable t
  INNER JOIN (
    SELECT
      Index,
      MAX(Version) AS MaxVersion,
      Language
    FROM atable
    GROUP BY Index, Language    
  ) max ON t.Index = max.Index AND t.Version = max.MaxVersion
    AND t.Language = max.Language
0 голосов
/ 04 мая 2013

А как насчет SELECT S.* FROM ( SELECT T1.* FROM entry_view T1 ORDER BY T1.version DESC ) S GROUP BY language

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