1. SQL / Говнокод #6448

    −860

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    -- Из простого...
    select kdet, cexnum, cex, last_value(cex) over(partition by kdet) as final_cex
    from xxtpa_rout_aztpa_v;
    
    -- Сделаем сложное...
    select t.*, max(max_cex) over(partition by kdet, rout_num) max_cex
    from (select t.*, case cex_num when max(cex_num) over(partition by t.kdet, t.rout_num) then t.cex else null end max_cex
    from xxtpa_rout_aztpa_v t) t;

    Пример того, как НЕ применять KISS-принцип.

    Запостил: dwinner, 22 Апреля 2011

    Комментарии (5) RSS

    • > max_cex
      Максимка!
      Ответить
    • финальный секас О_о
      Ответить
    • Это если MSSQL, а если какой-нть firebird, то и вовсе швах
      select vv.*, (select first 1 cex from xxtpa_rout_aztpa_v v where v.rout_num = vv.rout_num order by v.kdet desc)
      from xxtpa_rout_aztpa_v vv
      Ответить
      • Oracle это. Вся загвоздка в том, что тот же самый запрос через "обворачивание" подзапросом работает действительно правильно, устраняя fail сортировки по сегменту. Но дело в том, что вьюха xxtpa_rout_aztpa_v уже сортировала данные, поэтому эквивалентный второй запрос сложнее и дольше. Если бы мы не знали структуру вьюхи, то это уже был бы не говнокод, а решение проблемы сортировки по сегментам, которой нет в первом запросе.
        Ответить

    Добавить комментарий