Aggregate Function on Uniqueidentifier (GUID)

后端 未结 5 1398
日久生厌
日久生厌 2021-02-02 05:41

Let\'s say I have the following table:

category | guid
---------+-----------------------
   A     | 5BC2...
   A     | 6A1C...
   B     | 92A2...
相关标签:
5条回答
  • 2021-02-02 06:21

    Assuming you're using SQL Server 2005 or later:

    ;with Numbered as (
         select category,guid,ROW_NUMBER() OVER (PARTITION BY category ORDER BY guid) rn
         from myTable
    )
    select * from Numbered where rn=1
    
    0 讨论(0)
  • 2021-02-02 06:26

    Just cast it as a BINARY(16).

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

    You can cast it back later if necessary.

    WITH CategoryValue
    AS
    (    
        SELECT category, MIN(CAST(guid AS BINARY(16)))
        FROM myTable
        GROUP BY category
    )
    SELECT category, CAST(guid AS UNIQUEIDENTIFIER)
    FROM CategoryValue
    
    0 讨论(0)
  • 2021-02-02 06:29

    Aggregate functions can be used on Uniqueidentifier columns if SQL Server Version >= 2012

    expression

    Is a constant, column name, or function, and any combination of arithmetic, bitwise, and string operators. MIN can be used with numeric, char, varchar, uniqueidentifier, or datetime columns, but not with bit columns. Aggregate functions and subqueries are not permitted.

    0 讨论(0)
  • 2021-02-02 06:29

    SELECT top 1 category, guid FROM myTable GROUP BY category,guid

    0 讨论(0)
  • 2021-02-02 06:35
    declare @T table(category char(1), guid uniqueidentifier) 
    
    insert into @T 
    select 'a', newid() union all
    select 'a', newid() union all
    select 'b', newid()
    
    select
      S.category,
      S.guid
    from
    (  
      select
        T.category,
        T.guid,
        row_number() over(partition by T.category order by (select 1)) as rn
      from @T as T
    ) as S
    where S.rn = 1
    

    If you are on SQL Server 2000 you could to this

    select 
      T1.category,
      (select top 1 T2.guid 
       from @T as T2
       where T1.category = T2.category) as guid
    from @T as T1
    group by T1.category   
    
    0 讨论(0)
提交回复
热议问题