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ここから、 、 、のユニークな組み合わせを持つレコードを取得したいと思いactivityますtemplate。これらのフィールドの一意の組み合わせが 2 つ以上存在する場合は、そのうちの最初の 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

(レコード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

これはうまくいくはずだと思います-

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

ここで、group by を実行することにより、内部クエリの必要な列で最初の個別が取得されます。次に、各レコードの主キーの最小値を使用して、外側のクエリからすべての列を取得します。

于 2012-05-30T13:02:23.493 に答える
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 に答える