我有一张桌子给我一个值,如下所示
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
这有什么方法可以解决这个问题吗?
答案 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
- 这可以解释你的输出......