ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3437135 SQLの書き方について
質問者:-cinq- 以下の様なデータある場合

【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を作成したらよいのでしょうか?
困り度:
  • 困っています
質問投稿日時:
07/10/17 15:33
最新から表示回答順に表示

回答

ANo.3 SQL Serverは、2000ですか?2005ですか?

Bテーブルでは、年度毎にCODE=0のデータは、必ず存在する訳ではないのですよね?
例えば、次の1件だけが追加されることもありますか?

NO NENDO CODE BIKO
--+------+-----+----
__3_____2008________1_3333
回答者:chukenkenkou
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:
07/10/18 01:38
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.2 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
回答者:zjy
種類:アドバイス
どんな人:経験者
自信:自信あり
回答日時:
07/10/17 17:40
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 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])

を記述すれば良いと思われます。
回答者:yuji_from_kyoto
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
07/10/17 17:26
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示