電子書籍の厳選無料作品が豊富!

お世話になります。

 当方、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句でまとめたものをテーブルとして定義して、内部結合できればよさそうなのですが、上手い資料が見つかりませんでした。
 クエリでも、ストアドプロシージャとしての実行でも構いません。

A 回答 (1件)

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ではなかった行はどうなるのかな?
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
参考にいろいろいじってみたら、満足のいく結果が得られました。
以下です。
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

大変ありがとうございました。

お礼日時:2015/01/02 01:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!