sql没有从数据集中返回所需的最大版本

vptzau2j  于 2021-07-12  发布在  Spark
关注(0)|答案(2)|浏览(268)

例如,我有一个数据集:
名称版本First1.2.1第一个1.2.2第二个1.2.0第二个1.2.2第三个1.3.1第三个1.3.2第五个1.0.1第四个1.2.2第四个2.2第四个1.2.2
我需要返回具有最高版本的唯一名称。我最初使用 MAX(Version) 这给了我不正确的版本,因为它似乎是一个字符串。
所以我用了 MAX(CAST('Version') AS DECIMAL) as version`也尝试使用float,这使我返回null值作为版本。
有没有什么我可以用来把我带回最高版本,只有这样数据集会像:
名称版本first1.2.2第二个1.2.2第三个1.3.2第四个1.2.2第四个2.2.2
编辑:
我将展示一个与sql不同的更准确的示例,因为仅使用max并不能为我带来最高版本。

SELECT Name, Version from table where Name IN ("First")
GROUP BY Name

名称版本First1.3.0第一个1.8.0第一个1.11.0第一个1.9.2第五个1.12.0第五个1.7.2
如果我这样做了:

SELECT Name, MAX(Version) from table where Name IN ("First")
GROUP BY Name

这将返回:
名称版本1.9.2

ef1yzkbh

ef1yzkbh1#

在sparksql上,您可以使用 transform 得到一个整数数组,比如 [1, 12, 0] 为了 1.12.0 ,则可以获取每个名称的最大数组,并使用 . 获取原始版本号。

select 
    Name, 
    concat_ws('.', max(transform(split(Version, '\\.'), x -> int(x)))) as Version 
from mytable 
group by Name
qacovj5a

qacovj5a2#

你可以利用 HierarchyId 请回答您的问题。

select Name,Max(Version) as Version from table order by
 CAST('/'+Version+'/' as hierarchyID)

此解决方案应适用于SQLServer2008

相关问题