sql - 唯一标识符 (GUID) 上的聚合函数

标签 sql sql-server guid aggregate uniqueidentifier

假设我有下表:

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,但这似乎是一个丑陋的解决方法。我错过了一些优雅的解决方案吗?

最佳答案

只需将其转换为 BINARY(16)

SELECT category, MIN(CAST(guid AS BINARY(16)))
FROM myTable
GROUP BY category

如有必要,您可以稍后将其转换回来。

WITH CategoryValue
AS
(    
    SELECT category, MIN(CAST(guid AS BINARY(16)))
    FROM myTable
    GROUP BY category
)
SELECT category, CAST(guid AS UNIQUEIDENTIFIER)
FROM CategoryValue

关于sql - 唯一标识符 (GUID) 上的聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6069368/

相关文章:

guid - DocumentDB 自动生成的 ID : GUID or UUID? 哪个变体?

mysql - 将 SQL Server SQL 查询转换为 MySQL

sql - 如何获取 dblink 引用的表的列名?

sql-server - 无法使用 Entity Framework 5.0 在远程服务器上创建数据库

sql-server - 电子邮件地址作为用户名 BUG

ajax - 通过 GUID 保护 AJAX 请求

cmake - 我可以在 cmake 时获取 CMake 为特定 vcproj 生成的 GUID 吗?

mysql - 如何使用 UNION 选择所有字段(包括 NULL)?

mysql - 如何计算两个值以任意顺序出现在两列中的次数

java - 如何减少数据库连接失败的挂起时间