-2

私のSQLテーブルは次のようなものです。

id, name, value1, value2, value3, value4
1, xyz, 1, 2, 4, 1
2, xyz, 4, 2, 4, 1
3, abc, 4, 2, 4, 1
4, abc, 4, 2, 2, 1
5, abc, 4, 2, 2, 1

値(値1、値2、値3、値4)が変更されたを返すSQLクエリを作成したいと思います。したがって、結果の出力は次のようになります。

id, name, value1, value2, value3, value4
1, xyz, 1, 2, 4, 1
2, xyz, 4, 2, 4, 1
4, abc, 4, 2, 2, 1

出力に値が必要な場合は、次のようにDistinctまたはGroupbyを使用できたはずです。

select distinct value1,value2,value3,value4 from table;

ただし、ここでは、出力にid列とname列も必要です。

結果を得るために、本当にサブクエリを作成する必要があるのか​​、仮想/内部テーブルを作成する必要があるのか​​疑問に思います。または、よりスマートな方法がありますか?

私の質問は、テーブルにいくつかの一意の列があるかどうかを確認する方法とは異なります。あなたがそうでないと思うなら私に知らせてください、私は明確にすることができます。

4

2 に答える 2

3

これを試して

SQLフィドルの例

select *
from table
where id in (select min(id) from temp group by value1,value2,value3,value4)
于 2012-10-31T18:24:04.033 に答える
2

さて、あなたの更新された質問については、私はあなたがこのようにそれを行うことができると信じています:

;WITH CTE AS
(
    SELECT  *, 
            RN = ROW_NUMBER() OVER(PARTITION BY value1, value2, value3, value4 ORDER BY ID)
    FROM YourTable
)
SELECT id, name, value1, value2, value3, value4
FROM CTE
WHERE RN = 1;
于 2012-10-31T18:24:13.207 に答える