- 締切済み
sql express内部結合して重複行を削除する
お世話になります。 当方、SQL server expressを使用しており、以下の2テーブルをフローIDで内部結合しています。 test1 test2 順番、フローID 通番、フローID、タイトル 更新日時 1 1 1 1 てすと 12/1 2 2 2 1 テスト2 12/2 3 3 3 2 テスト3 12/3 4 3 テスト4 12/4 SELECT * FROM test1 INNER JOIN test2 ON (test1.フローID=test2.フローID) 結果 順番 フローID 通番 フローID タイトル 更新日時 1 1 1 1 てすと 12/1 1 1 2 1 テスト2 12/2 2 2 3 2 テスト3 12/3 3 3 4 3 テスト4 12/4 ここで、順番=1の行で指定されているフローIDがテーブルtest2に二行存在するため、結合した結果も順番=1に対して二行になっています。 これを、test2のフローIDが重複する場合はtest2の更新日時が新しいほうだけを表示するようにしたいと考えています。 ご教授頂けますと幸いです。 感覚としては、test2テーブルをgroup by句でまとめたものをテーブルとして定義して、内部結合できればよさそうなのですが、上手い資料が見つかりませんでした。 クエリでも、ストアドプロシージャとしての実行でも構いません。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- bin-chan
- ベストアンサー率33% (1403/4213)
TESTしてませんし、Deleteできるかわかりませんが SELECT * FROM test1 INNER JOIN (Select * From test2 where (フローID, 更新日時) = (SELECT (フローID, MAX(更新日時) ) From test2 Group by フローID ) ) as test2w ON (test1.フローID=test2w.フローID) カッコのネスト間違えてたらゴメン。 でも、重複のあるフローIDの、MAXではなかった行はどうなるのかな?
お礼
ご回答ありがとうございました。 参考にいろいろいじってみたら、満足のいく結果が得られました。 以下です。 SELECT test1.順番, test1.フローID, test2w.通番, test2w.フローID AS Expr1, test2w.タイトル, test2w.更新日時 FROM test1 INNER JOIN (SELECT 通番, フローID, タイトル, 更新日時 FROM test2 WHERE (更新日時 IN (SELECT MAX(更新日時) AS Expr1 FROM test2 AS test2_1 GROUP BY フローID))) AS test2w ON test1.フローID = test2w.フローID 大変ありがとうございました。