选择混合字符串/整数列的最大值

时间:2016-07-21 21:21:52

标签: sql sql-server sql-server-2008-r2

我有一张桌子给我一个值,如下所示

             id_unique                name    serie      timeB    timeD
155488EA-FF70-49D7-99AB-AFD4125F3435  dell  14296188    05:51   06:19   
1B640883-0DB6-4255-B1ED-770B6578064C  dell  14295943    04:37   04:39

我想要的值max我尝试过sql如下:

 select max(cast(id_unique as varchar(36))),
max(name),max(serie),max(timeB),max(timeD) from mytable group by name

我得到了这个结果

1B640883-0DB6-4255-B1ED-770B6578064C  dell  14296188    05:51   06:19

但我需要的结果就是这个:

155488EA-FF70-49D7-99AB-AFD4125F3435  dell  14296188    05:51   06:19

这有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

如果这些确实存储为字符串,我猜你想在找到最大值之前将第一列转换为uniqueidentifier,否则它们将按字母顺序进行评估。

SQL Server 2012及更高版本

您可以直接获取uniqueidentifiers的最小值/最大值:

select max(cast(id_unique as uniqueidentifier))
from MyTable

以前的版本

在找到最小值/最大值之前,您应该转换为二进制(16)。然后我会回到uniqueidentifier以获得结果的可读性:

select cast(max(cast(cast(id_unique as uniqueidentifier) as binary(16))) as uniqueidentifier)
from MyTable

答案 1 :(得分:0)

我的猜测是你需要使用row_number

这样的东西
select *
from (
    select *, row_number() over (order by somevalue desc) rn
    from yourtable
) t
where rn = 1

somevalue是哪个列,您需要max。我认为你现在正在尝试对每个字段使用max - 这可以解释你的输出......