1

我有一张这样的桌子:

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。

只是想了解是否有更好的方法来实现这一目标。

编辑1:

我正在使用 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

谢谢!

4

0 回答 0