2017-05-17 5 views
2

IDの値が変更されたすべてのレコードを取得したいと思います。たとえば、DateとValueが変更されたID 1を取得するためのクエリを作成したいとします。私はまた、このデータセットから古いものと新しいレコードを引っ張るようにしたい:データ値変更の行を選択するSQLクエリ

Date  ID Value 
1/1/2015 1 5 
2/2/2016 2 1 
3/3/2017 1 7 
4/4/2017 3 4 
5/1/2017 2 1 
5/6/2017 1 8 

望ましい結果:

Date ID Value 
1/1/2015 1 5 
3/3/2017 1 7 
5/6/2017 1 8 

としては、以下が指摘された、私は20万人以上のユニークなIDを引っ張っする必要がID = 1ので、動作しないでしょう。

+1

ヒント: 'ID = 1 '。 –

+0

もちろん。これは、200,000を超える個体IDを持つデータセットに対して指定する必要があります。 – lpd983

答えて

0

トリガーを使用して、挿入、更新、および削除されたレコードを取得できます。削除されたレコードを見つけるにはSelect * from deletedを使用し、挿入されたレコードを見つけるにはSelect * from Insertedを使用してください。詳細は、https://docs.microsoft.com/en-us/sql/relational-databases/triggers/use-the-inserted-and-deleted-tablesを参照してください。

+0

OK、ありがとう、私は明日の仕事に挑戦します! – lpd983

1

ここで(サブクエリで)、min(Value)がmax(value)と等しくないidを選択するだけです。次に、詳細を表示する単純な結合。

Declare @YourTable Table ([Date] varchar(50),[ID] int,[Value] int) 
Insert Into @YourTable Values 
('1/1/2015',1,5) 
,('2/2/2016',2,1) 
,('3/3/2017',1,7) 
,('4/4/2017',3,4) 
,('5/1/2017',2,1) 
,('5/6/2017',1,8) 

Select A.* 
From @YourTable A 
Join (
     Select ID 
     From @YourTable 
     Group By ID 
     Having min(Value)<>max(Value) 
    ) B on A.ID=B.ID 

戻り

Date  ID Value 
1/1/2015 1 5 
3/3/2017 1 7 
5/6/2017 1 8 
+0

ありがとう、私は明日これを試し、それがどうなるか教えてあげよう! – lpd983

+0

私の値のリストは、数十万、二百の列になっています。 *すべてのためだけにリストすることは可能ですか? – lpd983

+0

@ lpd983行数は重要ではありません。 IDと属性でデータとグループをアンピボットすることをお勧めします。あなたが援助を必要とするかどうか私に知らせて –

関連する問題