Отдельные последние версии в mysql - PullRequest
1 голос
/ 19 марта 2020

В моей таблице mysql есть столбец, похожий на этот:

appVersion

5.16.0.2889
5.16.0.2893
5.14.0
5.14.0.3
5.12.0.1
5.15.0.14
5.1.0.2
5.12.0.3

Я хочу получить отдельные последние версии этого столбца разделить на основе первых двух чисел (ab c .d, тогда рассматривать только ab как единственную версию)

, как здесь у нас есть, скажем, 3 отдельные последние версии будут:

5.16.0.2893
5.16.0.2889
5.15.0.14
5.14.0.3
5.14.0

Может кто-нибудь предложить mysql запрос для этого?

определение последней: скажем, если у нас есть

5.14.0.9
5.12.0.4
6.1.0.2
5.14.0.12
5.16.1.2
5.12.1.1

, отличная последняя 3 будет

6.1.0.2
5.16.1.2
5.14.0.12
5.14.0.9

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Что я понимаю из вашего вопроса, вам нужно отобразить 3 последние версии "ab", но со всеми их подрывными действиями. Вот код, который будет работать:

     select ver from app inner join 
  (select CONCAT(LPAD(SUBSTRING_INDEX(ver, '.', 1), 50, '0'),
LPAD(SUBSTRING(ver, LOCATE('.', ver)+1, LOCATE('.', ver, LOCATE('.', ver)+1)), 50, '0')) as ver2
from app group by ver2 order by ver2 desc limit 3) as v2 
on CONCAT(LPAD(SUBSTRING_INDEX(ver, '.', 1), 50, '0'),
LPAD(SUBSTRING(ver, LOCATE('.', ver)+1, LOCATE('.', ver, LOCATE('.', ver)+1)), 50, '0')) = v2.ver2 
order by v2.ver2 desc

Внутренний запрос выделяет три верхние версии формы 'a.0000b', а внутреннее объединение сопоставляет все версии с 'ab' = 'c .d '

0 голосов
/ 21 марта 2020

ВЫБРАТЬ VersNo ОТ (ВЫБРАТЬ DISTINCT SUBSTRING_INDEX (appVersion, '.', 2) AS 'VersionNo', appVersion AS 'VersNo' ИЗ таблицы ORDER BY appVersion) s ЗАКАЗАТЬ ПО VersNo;

...