- PR -

SQL文について質問したいのですが。

投稿者投稿内容
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2003-09-29 14:26
こちらの会議室には初めて投稿致します。
みーちくと申します。

もし、会議室が違っていた場合は、大変申し訳ございません。
下記のようなテーブルがあった場合、最終的な結果を表示するSQL文が
書けず困っております。
皆様、ご教授願います。

[sinsei_tbl]
| product_no | sinsei_id | apply_flg | staff_cd |
| a0001000 | 1 | 1 | 0125 |
| a0001000 | 2 | 3 | 0125 |
| a0001000 | 3 | 1 | 0325 |
| a0002000 | 1 | 1 | 0738 |
| a0002000 | 2 | 2 | 0981 |
*apply_flg
1:新規 2:変更 3:取消

[最終的な結果]
| product_no | sinsei_id | apply_flg | staff_cd |
| a0001000 | 3 | 1 | 0325 |
| a0002000 | 2 | 2 | 0981 |
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-09-29 15:05
select * from sinsei_tbl
where ((sinsei_id='3' and apply_flg='1') or (sinsei_id='2' and apply_flg='2'))
かな?
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2003-09-29 15:14
Ken-Labさん

返信ありがとうございます。
説明がうまくできなくて、申し訳がございません。
sinsei_idは固定ではなく、
各製造番号のsinsei_idのmax値を表示したいのですが。
宜しく御願いいたします。
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-09-29 15:31
わわっ。これは失礼しました。
これは、少なくともストアドプロシージャか別途プログラム処理が必要ですねー。
ちょっと出直してまいります、ハイ。
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2003-09-29 15:52
Oracleだったら、これでいけませんか?
(今、環境がないので試してません。)

select A.product_no,A.sinsei_id,A.apply_flg,A.staff_cd from sinsei_tbl A
where
( A.product_no , A.sinsei_id ) in
(
select b.product_no , max(b.sinsei_id) from sinsei_tbl B
group by b.product_no
)
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2003-09-29 15:53
追記です。先程のSQLは、
同一product_no内では、sinsei_id列の値は
ユニーク(同一値なしで最大を取ればよい)の前提です。

前提が、使用ケースと異なる場合、自分で工夫してください。
パルプ
ベテラン
会議室デビュー日: 2003/06/18
投稿数: 59
投稿日時: 2003-09-29 16:12
とりあえず副問合せしてみました。

SELECT product_no, sinsei_id, apply_flag, staff_cd
FROM sinsei_tbl,
(SELECT product_no, MAX(sinsei_id)
FROM sinsei_tbl GROUP BY product_no) AS max_tbl)
WHERE sinsei_tbl.product_no=max_tbl.product_no
AND sinsei_tbl.sinsei_id=max_tbl.sinsei_id;

もっと良い方法があるとは思いますが…
みなさまフォローお願いします。。
リックス
常連さん
会議室デビュー日: 2001/10/01
投稿数: 47
お住まい・勤務地: 東京
投稿日時: 2003-09-29 16:18
こんにちは。
副問合せ その2です。
ただし、DBは SQL Server 2000 です。(検証済み)
OracleでもINNER JOIN句はサポートされているはずなので、
動作するかもしれません。

コード:
SELECT T.* 
from sinsei_tbl AS T
inner join (SELECT product_no,max(sinsei_id) AS sinsei_id
		FROM sinsei_tbl
		GROUP BY product_no) AS M
ON T.product_no = M.product_no AND T.sinsei_id = M.sinsei_id
ORDER BY T.product_no


スキルアップ/キャリアアップ(JOB@IT)