- PR -

SQLでの抽出条件について

投稿者投稿内容
よぴ
会議室デビュー日: 2003/12/22
投稿数: 9
投稿日時: 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で一発でとれるやり方を探しております。
なにとぞ、お願いいたします。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-04 11:37
DBMSと、かけるだけ頑張って書いた SQL を提示してみましょう^^
よぴ
会議室デビュー日: 2003/12/22
投稿数: 9
投稿日時: 2006-08-04 11:48
さっそくのお返事ありがとうございます。
現在SQLServer2003にて開発しております。

@の条件のプロジェクトIDが'1'のもの
という条件は
SELECT プロジェクトID,サブプロジェクトID,版数
FROM テーブルA
WHERE プロジェクトID = '1'
でいけました。

そこから、Aの条件を絞ろうとして苦戦しております。
自分の考えだとサブクエリ?を使うものだと思い、
ネットで検索しておりましたが、知識が不足しているのか見当はずれなのか
該当する情報を引き出せなかったのが現状です。

やはり一発でレコードを絞るのは難しいのでしょうか?
oracle
常連さん
会議室デビュー日: 2003/12/04
投稿数: 29
お住まい・勤務地: さいたま
投稿日時: 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
)
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2006-08-04 11:53
単純に考えて

SELECT プロジェクトID,サブプロジェクトID,MAX(版数)
FROM テーブル名
WHERE (プロジェクトID = 1)
GROUP BY プロジェクトID,サブプロジェクトID

とかではダメですか?

※ SQLServerでは目的のデータが取れましたが
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-04 11:57
・・・ですね。

#出遅れてしまったw
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2006-08-04 12:02
引用:

Katzeさんの書き込み (2006-08-04 11:53) より:
単純に考えて

SELECT プロジェクトID,サブプロジェクトID,MAX(版数)
FROM テーブル名
WHERE (プロジェクトID = 1)
GROUP BY プロジェクトID,サブプロジェクトID

とかではダメですか?

※ SQLServerでは目的のデータが取れましたが




テーブルに他にも列があったりしたらこれだけだと上手くいか
ないかもしれないので、oracle さんのSQLの方がいいですね。
よぴ
会議室デビュー日: 2003/12/22
投稿数: 9
投稿日時: 2006-08-04 12:13
R・田中一郎さん、Katzeさん、oracleさん
ありがとうございます。

Katzeさんの式にて、試したところ該当のデータを取得することができました。

しかし、oracleさんの式では
@の条件のときと結果が同じで絞ることができませんでした。

Katzeさんの式とoracleさんの式で、違いがでる原因はなんでしょうか?
他の列が存在しているのが原因でしょうか?
実際に試しているテーブルには、他に列が存在しています。
(プロジェクト名やサブプロジェクト名などです。主キーではありません)

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