- 締切済み
SQLの書き方について
以下の様なデータある場合 【Aテーブル】 ------------- NO,ITEM, KOSU ------------- 1 ,001 , 1 2 ,002 , 3 3 ,003 , 1 【Bテーブル】 ------------------- NO,NENDO,CODE,BIKO ------------------- 1,2006 , 1 , 1111 1,2007 , 0 , 1111 1,2007 , 2 , 1111 2,2007 , 0 , 2222 3,2007 , 0 , 3333 3,2007 , 1 , 3333 ------------------------------ NO,NENDO,CODE,BIKO,ITEM,KOSU ------------------------------ 1,2007 , 0 , 1111,001 , 1 2,2007 , 0 , 2222,002 , 3 3,2007 , 0 , 3333,003 , 1 と出力。(キーはNo) NO毎のかつ年度の降順、コードの昇順で最新の1件を 取得するにはどのようなSQLを作成したらよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
SQL Serverは、2000ですか?2005ですか? Bテーブルでは、年度毎にCODE=0のデータは、必ず存在する訳ではないのですよね? 例えば、次の1件だけが追加されることもありますか? NO NENDO CODE BIKO --+------+-----+---- __3_____2008________1_3333
- zjy
- ベストアンサー率0% (0/0)
SELECT T2.NO,T2.NENDO,T2.CODE,T2.BIKO,A.ITEM,A.KOSU FROM A LEFT JOIN ( SELECT B.* FROM ( SELECT B.NO,MAX(B.NENDO) AS NENDO,MIN(B.CODE) AS CODE FROM B GROUP BY B.NO ) T1 INNER JOIN B ON B.NO = T1.NO AND B.NENDO = T1.NENDO AND B.CODE = T1.CODE ) T2 ON A.NO = T2.NO
- yuji_from_kyoto
- ベストアンサー率34% (44/127)
Oralceですか?SQLServerですか?Accessですか? 条件文にINで where Bテーブル.NENDO IN (SELECT Max(Bテーブル.NENDO) FROM Bテーブル GROUP BY Bテーブル.[NO]) and Bテーブル.CODE IN (SELECT Min(Bテーブル.CODE) FROM Bテーブル GROUP BY Bテーブル.[NO]) を記述すれば良いと思われます。