2017-12-14 16 views
1

同じIDで、両方の行に異なるデータを持っています 最終結果を更新するのはデータに存在するIDの最後のレコードにする必要があります。 例ID 1データベースこれは、複数のレコードのためのSQLサーバで行うことができますどのように同じIDで行が異なるデータを更新する

1|R1|INDIA|UK 

にロードされるレコードの今

ID | Name | PermanentAddrss | CurrentLocation 
1 | R1 | INDIA   | USA 
1 | R1 | INDIA   | UK 

+1

ソートするIDまたはdatetimeカラムを持つ他のカラムはありますか?あなたが与えた最新のデータでは、最後のレコード – Wanderer

+0

を識別するのは困難です。Row_Number()を試行してidの各グループの最初のレコードを更新することができます。 –

+0

助けてくれてありがとう! – sanket

答えて

1

あなたは、最新のID値を識別することができます。これは、与えられたID値の最後の人口の記録を取る

SELECT B.ID, A.NAME, A.PERMANENTADDRS, A.CURRENTLOCATION 
FROM 
(SELECT ID, NAME, PERMANENTADDRS, CURRENTLOCATION, MAX(RNUM) AS LATEST_ID FROM 
    (SELECT ID, NAME, PERMANENTADDRS, CURRENTLOCATION, ROW_NUMBER() OVER (PARTITION BY ID) AS RNUM FROM YOUR_TABLE) 
GROUP BY ID, NAME, PERMANENTADDRS, CURRENTLOCATION) A 
INNER JOIN 
YOUR_TABLE B 
ON A.LATEST_ID = B.ID; 

。最新のレコードのロジックが異なる場合は、クエリに適切に組み込むことができます。

+0

論理が正解です。これを試しましたが、データが行によって間違って表示されています。私のクライアントにLast_updated_timeか最新のレコードを特定するのに役立つ何かを尋ねる必要があります。助けてくれてありがとう! – sanket

2

データの挿入順にデータを格納または取得しないため、最新のレコードまたは最後のレコードを検索するには、レコードを注文する必要があります。 これは通常、last_modified_dateのようなタイムスタンプ列です。あなたの現在のテーブルは、ゆっくり変化する次元タイプ2の第一候補です。それを実装することを検討する必要があります。 Kimballのグループサイトのexplanationを参照してください。

実際に注文の影響を受けておらず、各IDの行が必要な場合は、以下のクエリを試すことができます。

select 
ID, 
Name, 
PermanentAddress, 
CurrentLocation 
from 
(select 
*, 
row_number() over(partition by id order by (select null)) r 
from yourtable)t 
where r=1 
+0

あなたの提案をありがとう! – sanket

関連する問題