ORACLE質問 PART2 at TECH
[2ch|▼Menu]
502:デフォルトの名無しさん
08/04/11 13:16:21
>>499
-- (KINGAKUの絶対値毎にIDの逆順でランク付けした値) ≦ (KINGAKUの絶対値毎の+と−の個数の差) の
-- 行を選択しているつもり。
-- 誰かもっと短くしてくれ。
select id, kingaku from (
  select tbl.id, tbl.kingaku, rank() over (partition by abs(tbl.kingaku) order by id desc) r, valid_rows from (
    select * from hoge where kingaku >= 0 order by id desc
  ) tbl join (
    select phoge.kingaku, plus_count - nvl(minus_count,0) valid_rows from (
      select kingaku, count(*) plus_count from hoge where kingaku >= 0 group by kingaku
    ) phoge left join (
      select kingaku, count(*) minus_count from hoge where kingaku < 0 group by kingaku
    ) mhoge on (phoge.kingaku = - mhoge.kingaku)
  ) ct on (tbl.kingaku = ct.kingaku)
) where r <= valid_rows order by id;
-- まあ、SQLだけでどうにかしようなんて考えない方がいいんじゃね?


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4316日前に更新/123 KB
担当:undef