- ベストアンサー
SQLについて教えてください
お世話になります。 SQLについて教えてください AテーブルとBテーブルからCテーブルを作成したいのですが、 KEYをキーにAテーブルのIDが1で、YYMMが一番新しい項目(最大の項目)を 取得し、Cテーブル作成したいのですが、どのようにするのでしょうか? Aテーブル Bテーブル Cテーブル KEY ID yymm KEY KEY YYMM AAA 0 200612 AAA AAA 200611 AAA 1 200611 BBB BBB 200611 AAA 1 200609 BBB 0 200611 CCC 1 200611
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
AテーブルのBBBのID値は、1の誤りでしょうか? そう仮定します。 なお、「KEY」は予約語のようなので、注意してください。 insert into C select XA."KEY",XA.yymm from (select "KEY",max(yymm) as yymm from A where ID=1 group by "KEY") as XA inner join B on XA."KEY"=B."KEY"
その他の回答 (2)
SELECT B.KEY, MAX(A.yymm) FROM B INNER JOIN A ON A.KEY = B.KEY AND A.ID = (SELECT MAX(x1.ID) FROM B x1 WHERE x1.KEY = A.KEY GROUP BY x1.KEY) 要は、IDの最大値を求めなければならないこと。 あっ、動作確認してないけど、やっている意味はわかりますよね? もっと解りやすくすると... SELECT A.KEY , MAX(A.ID) as ID INTO #AA FROM A INNER JOIN B ON B.KEY = A.KEY GROUP BY A.KEY SELECT A.KEY , MAX(A.yymm) as yymm FROM A INNER JOIN #AA aa ON aa.KEY = A.KEY AND aa.ID = A.ID GROUP BY A.KEY
- bin-chan
- ベストアンサー率33% (1403/4213)
実際に動作確認してないので、外してたらごめんなさい。 既にtbl_cがあるなら、最初の2行を insert into tbl_c as select tbl_b.key, tbl_a2.yymm_max as yymm にしてみてください。 from句にselectがあるので奇異に感じるかと思いますが、 viewである、と理解してください。 create table tbl_c as select tbl_b.key, tbl_a2.yymm_max from tbl_b, ( select tbl_a.key, max(tbl_a.yymm) as yymm_max from tbl_a where tbl_a.id=1 group by tbl_a.key ) as tbl_a2 where tbl_b.key=tbl_a2.key ;