Oracle : KEEP
ただいまVB.NET+Oralce9iでお仕事中。
で、SQL書くのに相変わらずのた打ち回りながらあちこち調べているんだけれども。
SAK StreetsのSAK図書館(SQLのトピックを実用的に分類、例を挙げてわかりやすく説明してある。流しのSEには涙が出るほどありがたく、アンチョコにさせていただいている)で、「DENSE_RANK」ってのを見つけた。
MAX(FieldA) KEEP (DENSE_RANK LAST ORDER BY FieldB)
で、「最大のFieldBを持つレコードのFieldA」を取得できる。
…なんてこったい。すごいじゃないか。いつのまにこんな機能が。
この機能はけっこぅ欲しい場面があって、今までは同等の機能をファンクションでOracle側に組み込んだりしてしのいでいたんだが。
やっぱプロジェクトによってはプロシージャとかファンクションとか禁止のところもあって、なかなか苦労してたんだよなー。
見つけたとたんに「ありがたいっ!」と叫んだのもなんだか久しぶり。
と思ったら、レコード0件の時にORA-03113でEndOfFile→DBから切断。
がーん。
9iのバグなのかサーバのチューニングが悪いのかはわからないし、わかったところで今回私はサーバをどうこうできるポジションにいない。
今回のプロジェクトはプロシージャ組み込みがアウトなので、代用の関数を自作するわけにも行かず。
いちおぅプロジェクトリーダーに現象を伝えて、ループで1レコードずつ回して処理するようにVB側のロジックを大修正。
泣ける。
