- - PR -
SQLに関するご質問
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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初心者で申し訳ありませんが、ご指導やアドバイスをいただけましたらと存じます。 |
|
投稿日時: 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 |
|
投稿日時: 2008-04-29 18:57
回答じゃなけいど DB名とバージョン名がないと答えにくい
|
|
投稿日時: 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でした。以後気をつけます。 |
|
投稿日時: 2008-04-29 21:05
そのSQLだとテーブルの件数が増えると指数的にパフォーマンスが劣化する可能性があるので気をつけてください。
テーブルの件数が少ないなら問題ないですが。 |
|
投稿日時: 2008-04-30 06:59
本題と関係ありません(_ _)
>いろいろ思考錯誤してみまして 四字熟語としては「試行錯誤」です。 試行の結果錯誤するのは問題ありませんが、思考を錯誤していては先に進めません |
|
投稿日時: 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 ) というやり方ならどうでしょう。 |
|
投稿日時: 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