- - PR -
組合せの最大値を取得する方法
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-23 18:11
仮にOracleとした場合、rownumで出力件数を制限してしまうと A B C ------- 1 1 A 1 3 B 3 1 C 3 2 D 3 2 F この場合、rownum<= x で x = 1 の場合、片方出力されないと思うのですが。 私は 年と月を示す数値が別々で格納されているDBから 最新の年月を取得する際は MAX(年+月の結合)で取得しています。 | ||||||||
|
投稿日時: 2006-08-23 18:53
rank関数使っちゃダメですか?
http://www.atmarkit.co.jp/fdb/rensai/sqlclinic08/sqlclinic08_2.html [ メッセージ編集済み 編集者: 乳牛 編集日時 2006-08-23 19:14 ] | ||||||||
|
投稿日時: 2006-08-23 19:24
こんなWHERE句はいかがでしょうか。
where a * 10000 + b = (select max(a * 10000 + b) from xxxx) | ||||||||
|
投稿日時: 2006-08-23 20:11
これってたとえば A が年で B が月だったり、あるいは、A が月で B が日だったり、という良く出くわすパターンですよね。冗長化されていることが、難しさを増している要因だと思います。 素直に考えると、 select * from TABLE where A = (select max(A) from TABLE) and B = (select max(B) from TABLE where A = (select max(A) from TABLE)) あたりでできそうな感じです(実際に動かして試してはいませんが)。 これは TAKEZO さんが書かれた SQL にわりと近いものです。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||||||
|
投稿日時: 2006-08-23 22:24
OLAP関数が使えるDBMS(例えば、Oracle, DB2 UDB for LUW、等)なら、
では、いかがでしょうか? | ||||||||
|
投稿日時: 2006-08-24 00:21
返答下さった皆さん有難うございます。RANK関数及びDENSE_RANK関数は初めて知りました。
SQL自体も一番スマートな感じがして良さそうですし、この関数を教えて頂けただけでも 質問して良かったなぁと思いました。 私が書いたSQLは冗長でしたね^^; unibonさんに書いて頂いたものが私の頭の中で描いていたものです。 まだまだ勉強が足りませんね。反省 [ メッセージ編集済み 編集者: TAKEZO 編集日時 2006-08-24 00:22 ] | ||||||||
|
投稿日時: 2006-09-05 12:57
正しくは DENSE_RANK() OVER(ORDER BY a desc,b desc) rank やね [ メッセージ編集済み 編集者: ぷさいくろう 編集日時 2006-09-05 13:04 ] | ||||||||
