- - PR -
SQLでの抽出条件について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-08-04 11:30
いつもコーディングの際に参考させてもらっています。
現在SQLで苦戦しているところで、どなたか知恵を拝借したいと思いまして、 投稿いたしました。 あるテーブルAに、プロジェクトID、サブプロジェクトID、版数という列があります。 上記の3つは主キーです。 サンプルデータとして プロジェクトID サブプロジェクトID 版数 1 1 1 1 1 2 1 2 1 2 1 1 というデータがあります。 抽出条件として、 @プロジェクトIDが'1'のもの AサブプロジェクトIDが同一のものが存在した場合、版数の値が一番高いもの という条件をSQLにて表記したいのですが、苦戦しております。 結果として、 プロジェクトID サブプロジェクトID 版数 1 1 2 1 2 1 という2件のデータを抽出したいのですが・・・。 @の条件で抽出したあと、プログラムから(当方VB.NET)で ループさせてテーブルに格納する、というやり方もあったのですが、 どうもスマートではないような気がしまして、 SQLで一発でとれるやり方を探しております。 なにとぞ、お願いいたします。 | ||||
|
投稿日時: 2006-08-04 11:37
DBMSと、かけるだけ頑張って書いた SQL を提示してみましょう^^
| ||||
|
投稿日時: 2006-08-04 11:48
さっそくのお返事ありがとうございます。
現在SQLServer2003にて開発しております。 @の条件のプロジェクトIDが'1'のもの という条件は SELECT プロジェクトID,サブプロジェクトID,版数 FROM テーブルA WHERE プロジェクトID = '1' でいけました。 そこから、Aの条件を絞ろうとして苦戦しております。 自分の考えだとサブクエリ?を使うものだと思い、 ネットで検索しておりましたが、知識が不足しているのか見当はずれなのか 該当する情報を引き出せなかったのが現状です。 やはり一発でレコードを絞るのは難しいのでしょうか? | ||||
|
投稿日時: 2006-08-04 11:53
こんなかんじではないですか?
select * from table_name where プロジェクトID=条件('1') and 版数 in ( select max(版数) from table_name where プロジェクトID=条件('1') group by サブプロジェクトID ) | ||||
|
投稿日時: 2006-08-04 11:53
単純に考えて
SELECT プロジェクトID,サブプロジェクトID,MAX(版数) FROM テーブル名 WHERE (プロジェクトID = 1) GROUP BY プロジェクトID,サブプロジェクトID とかではダメですか? ※ SQLServerでは目的のデータが取れましたが | ||||
|
投稿日時: 2006-08-04 11:57
・・・ですね。
#出遅れてしまったw | ||||
|
投稿日時: 2006-08-04 12:02
テーブルに他にも列があったりしたらこれだけだと上手くいか ないかもしれないので、oracle さんのSQLの方がいいですね。 | ||||
|
投稿日時: 2006-08-04 12:13
R・田中一郎さん、Katzeさん、oracleさん
ありがとうございます。 Katzeさんの式にて、試したところ該当のデータを取得することができました。 しかし、oracleさんの式では @の条件のときと結果が同じで絞ることができませんでした。 Katzeさんの式とoracleさんの式で、違いがでる原因はなんでしょうか? 他の列が存在しているのが原因でしょうか? 実際に試しているテーブルには、他に列が存在しています。 (プロジェクト名やサブプロジェクト名などです。主キーではありません) |