唯一标识符 (GUID) 上的聚合函数
假设我有下表:
category | guid
---------+-----------------------
A | 5BC2...
A | 6A1C...
B | 92A2...
基本上,我想要执行以下 SQL:
SELECT category, MIN(guid)
FROM myTable
GROUP BY category
它不一定必须是 MIN。我只想返回每个类别的一个 GUID。我不在乎是哪一个。不幸的是,SQL Server 不允许在 GUID 上使用 MIN 或 MAX。
当然,我可以将 guid 转换为 varchar,或者创建一些嵌套的 TOP 1 SQL,但这似乎是一个丑陋的解决方法。我错过了一些优雅的解决方案吗?
Let's say I have the following table:
category | guid
---------+-----------------------
A | 5BC2...
A | 6A1C...
B | 92A2...
Basically, I want to do the following SQL:
SELECT category, MIN(guid)
FROM myTable
GROUP BY category
It doesn't necessarily have to be MIN. I just want to return one GUID of each category. I don't care which one. Unfortunately, SQL Server does not allow MIN or MAX on GUIDs.
Of course, I could convert the guid into a varchar, or create some nested TOP 1 SQL, but that seems like an ugly workaround. Is there some elegant solution that I've missed?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
只需将其转换为
BINARY(16)
即可。如果需要,您可以稍后将其投射回来。
Just cast it as a
BINARY(16)
.You can cast it back later if necessary.
假设您使用的是 SQL Server 2005 或更高版本:
Assuming you're using SQL Server 2005 or later:
如果 SQL Server 版本 >= 2012,则可以在 Uniqueidentifier 列上使用聚合函数
Aggregate functions can be used on Uniqueidentifier columns if SQL Server Version >= 2012
如果您使用的是 SQL Server 2000,您可以这样做
If you are on SQL Server 2000 you could to this
选择前 1 个类别、指南
来自我的表
按类别、指南分组
SELECT top 1 category, guid
FROM myTable
GROUP BY category,guid