1

考虑下表:

primaryKey   id    activity   template  creator   created
1            1      3           5         x       2011-10-13
2            2      4           2         y       2011-10-15  
3            2      4           7         z       2011-10-24
4            2      4           7         u       2011-10-29

从这里我想检索具有 和 的唯一组合的id记录。如果存在这些字段的两个或多个独特组合,我想采用其中的第一个。activitytemplate

作为上表数据的示例,我需要的输出是

primaryKey   id    activity   template  creator  created
1            1      3           5         x       2011-10-13
2            2      4           2         y       2011-10-15  
3            2      4           7         z       2011-10-24

(由于记录 3 和 4 具有相同的组合,我只想记录 3,因为它是第一次出现)

我可以使用单个 SQL 语句执行此操作吗?

4

3 回答 3

6
SELECT primarykey, id, activity, template, creator, created FROM (
    SELECT *, row_number() OVER (partition BY id, activity, template ORDER BY created) as rn FROM table
) a 
WHERE rn = 1
于 2012-05-30T13:06:31.313 回答
0

这适用于 MS SQL Server。

更新了,因为我犯了一个小错误!

SELECT DISTINCT 
        ROW_NUMBER() OVER (ORDER BY 
                                id    
                            ,   activity   
                            ,   template  
                            ,   creator  
                            ,   created ) PrimaryKey

    ,   id    
    ,   activity   
    ,   template  
    ,   creator  
    ,   created 
    FROM 
    [TABLE_NAME]
    GROUP BY 

        id    
    ,   activity   
    ,   template  
    ,   creator  
    ,   created 
于 2012-05-30T12:56:37.193 回答
0

我认为这应该工作 -

SELECT * 
FROM TABLE
WHERE 
 primaryKey in 
 (
   SELECT min(primarkyKey) from TABLE 
      group by id, activity, template
 )

在这里,通过 group by 获得内部查询中所需列的第一个不同。然后每个不同记录的主键的最小值用于从外部查询中获取所有列。

于 2012-05-30T13:02:23.493 回答