Как рассчитать максимальный размер поля вида в 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

Спасибо!

0 ответов

Другие вопросы по тегам