1

这个好像拿不到 所以我有一张这样的桌子:

RowID    UserID  Type    Data
1        A       A       1
2        A       A       2
3        A       B       1
4        A       B       2
5        B       A       1
6        B       A       2
7        B       B       1
8        B       B       2

我需要按 UserID 和 Type 对这个表进行分组,然后返回每个组中包含 Data 列中的 MIN 值的记录的 RowID。

所以我的结果集是:1 3 5 7

4

1 回答 1

3

对于 SQL Server >= 2005,您可以执行以下操作:

select RowID
from (
    select RowID,
        Rank() over (Partition BY UserID, Type 
            order by Data) as Rank
    from MyTable
) tmp
where Rank = 1

SQL 小提琴示例

对于 SQL Server < 2005,您可以执行以下操作:

select t.RowID
from MyTable t
inner join (
    select UserID, Type, min(Data) as MinData
    from MyTable
    group by UserID, Type 
) tm on t.UserID = tm.UserID and t.Type = tm.Type
    and t.Data = tm.MinData

SQL 小提琴示例

于 2012-10-04T20:31:03.757 回答