2011-09-16 19 views
4

2つのテーブルがあり、RAWtableとMAINtableがあります。 は複数のレコードが存在する場合は最新のgroupIDを取得する必要があります)。例えば、私はRAWtableでこれを持っている:テーブル内の重複レコードから最新のIDを取得

id groupid  name  code 
1 G09161405 Name1  Code1 
2 G09161406 Name1  Code1 

二つのレコードが一つとして扱われるべきであるとのみ、この値を返すべきである:

id groupid  name  code 
2 G09161406 Name1  Code1 

この行が挿入さshiuld行のみですメインテーブル。最新のグループID(グループIDは、日付と時間の組み合わせである)

を返す提供し、私はこれを試してみたが、そのは動作していない:

SELECT MAST.ID, MAST.code, MAST.name FROM RAWtable AS MAST INNER JOIN 
(SELECT code, name, grouid,id FROM RAWtable AS DUPT GROUP BY code, name, groupid,id HAVING COUNT(*) >= 2) DUPT 
ON DUPT.code =MAST.code and DUPT.name =MAST.name where dupt.groupid >mast.groupid 

は、私はこれをどのように行うことができますか?どうもありがとう。

+0

この(オラクル/ MySQLの/のSQLServer/SQLiteは何であるかDB ...)? – Yahia

答えて

5
select R.id, 
     R.groupid, 
     R.name, 
     R.code 
from (select id, 
      groupid, 
      name, 
      code, 
      row_number() over(partition by name, code order by groupid desc) as rn 
     from RawTable  
    ) as R 
where R.rn = 1  

それとも、ROW_NUMBER()を持っていない場合

select R1.id, 
     R1.groupid, 
     R1.name, 
     R1.code 
from RawTable as R1 
    inner join ( 
       select name, code, max(groupid) as groupid 
       from RawTable 
       group by name, code 
      ) as R2 
    on R1.name = R2.name and 
     R1.code = R2.code and 
     R1.groupid = R2.groupid 
3

この方法を試してみてください、それはあなたに最新になり、最大のグループIDを与える:

SELECT MAX(GroupId), Name, Code 
FROM RAWtable 
GROUP BY Name, Code 
+0

彼は重複の場合に言った – Neelesh

+0

@ Neeesh:それは重複レコードを返されません、同じ名前とコードの最大グループIDを与えるだけです。 –

0

これを試してみてください。 select max(t.groupid), t.name, t.code from RAWtable t group by t.name, t.code

これは基本的に最大値をから選択します各名前とコードの組み合わせについては、を参照してください。

+0

ありがとうございました。私はあなたのすべての助けに感謝:) –

2
select max(id),name, code from RaTable 
group by name,code having count(*)>1 

が返されます:

id name code 
2 Name1 Code1 

がテーブルに複数のレコードを持つすべてのレコードの最大gorupidを返します

関連する問題