- PR -

SQLに関するご質問

1
投稿者投稿内容
lagna
常連さん
会議室デビュー日: 2003/11/06
投稿数: 27
投稿日時: 2008-04-29 17:50
いつも拝見させていただいております。lagnaです。

DBのクエリでお聞きしたいのですが、下記のようなclient_tableでデータが
client_id | data_count | regist_date |
-----------+--------------+---------------------+
3860 | 1 | 2008-04-20 |
3861 | 1 | 2008-04-21 |
3861 | 2 | 2008-04-29 |
3861 | 3 | 2008-04-29 |
3862 | 1 | 2008-04-29 |
3862 | 2 | 2008-04-29 |
というテーブルがありclient_idが重複せず、data_countの最大値を取得したいのです。
取得したい状態
client_id | data_count | regist_date |
-----------+--------------+---------------------+
3860 | 1 | 2008-04-20 |
3861 | 3 | 2008-04-29 |
3862 | 2 | 2008-04-29 |

この場合、どのようなクエリになるのでしょうか?
DB初心者で申し訳ありませんが、ご指導やアドバイスをいただけましたらと存じます。




Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2008-04-29 18:43
regist_dateがほしいならサブクエリを使うしか思いつかないですね・・・。
いらないなら下記のサブクエリ部だけでいけますが。

select *
from client_table t1,
(select client_id, max(data_count)
from client_table
group by client_table) t2
where t1.client_id = t2.client_id
and t1.data_count = t2.data_count
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-04-29 18:57
回答じゃなけいど DB名とバージョン名がないと答えにくい
lagna
常連さん
会議室デビュー日: 2003/11/06
投稿数: 27
投稿日時: 2008-04-29 19:13
Anthyhime様
ありがとうございます。いろいろ思考錯誤してみまして
select s1.client_id,s1.data_count from client_table as s1 where s1.data_count >= (select max(s2.data_count) from client_table as s2 where s1.client_id = s2.client_id);
で取れました・・・。おそらく・・・。
大変参考になりました。精進いたします。

七味唐辛子様
 情報提供が少なく申し訳ありませんでした。今回はPostgreSQLの8.0でした。以後気をつけます。


Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2008-04-29 21:05
そのSQLだとテーブルの件数が増えると指数的にパフォーマンスが劣化する可能性があるので気をつけてください。
テーブルの件数が少ないなら問題ないですが。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2008-04-30 06:59
本題と関係ありません(_ _)

>いろいろ思考錯誤してみまして

四字熟語としては「試行錯誤」です。
試行の結果錯誤するのは問題ありませんが、思考を錯誤していては先に進めません
ノラ
常連さん
会議室デビュー日: 2003/11/06
投稿数: 37
お住まい・勤務地: 東京都
投稿日時: 2008-04-30 10:22
select * from client_table c1
where not exists
( select 1 from client_table c2
where c1.client_id = c2.client_id
and c1.data_count < c2.data_count )
というやり方ならどうでしょう。
無名tiger
常連さん
会議室デビュー日: 2008/04/18
投稿数: 36
投稿日時: 2008-04-30 13:14
select t1.client_id,t1.data_count,t1.regist_date
from client_table t1
inner join (
SELECT client_id
,max(data_count) as maxdata_count
FROM client_table
group by client_id) t2
on t1.client_id=t2.client_id
and t1.data_count=t2.maxdata_count

参考になればうれしいです。
1

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