Как рассчитать максимальный размер поля вида в postgresql?
У меня есть такая таблица:
Category Version
B 1.8.11
B 1.20.138
B 1.29.01
B 1.30.89
B 1.3.114
Теперь я хочу получить последнюю версию. По умолчанию order by не работает, потому что 1.8.11 рассматривается как самый высокий.
Я понимаю, что одним из способов является использование split_part и substring и получение последней версии, которая в этом случае будет 1.30.89.
Просто хотел понять, есть ли лучший способ добиться этого.
Edit1:
Я использую redshift postgresql. Так что не все функции postgresql доступны.
Еще один способ, который я понял, это что-то вроде этого. Здесь я добавляю нули влево, а затем я должен удалить их, прежде чем сообщать о фактической версии.
(TO_CHAR(SPLIT_PART(version,'.',1),'fm000') + '.' + TO_CHAR(SPLIT_PART(version,'.',2),'fm000') + '.' + TO_CHAR((case when SPLIT_PART(version,'.',3) = '' then '0' else SPLIT_PART(version,'.',3) end),'fm000')) AS padded_version
EDIT2: я получил немного лучший метод. Итак, просто поделиться этим здесь:
select category, version from
(SELECT CATEGORY,
VERSION,
ROW_NUMBER() OVER (PARTITION BY CATEGORY ORDER BY SPLIT_PART(VERSION,'.',1)::INT DESC,SPLIT_PART(VERSION,'.',2)::INT DESC),SPLIT_PART(VERSION,'.',3)::INT DESC)
from table1)
where row_number = 1
Спасибо!