PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Твърде много подзаявки за подреждане по, максимум, за моя интелект

Можете да използвате row_number() два пъти:

select  *
from    (
        select  *
        ,       row_number() over (partition by OT order by OI desc) as rn2
        from    (
                select  *
                ,       row_number() over (partition by EI, BI, OT 
                                           order by created_at desc) as rn1
                from    Odds
                where   EI = 1 -- for event 1
                ) sub1
        where   rn1 = 1 -- Latest row per EI, BI, OT
        ) sub2
where   rn2 = 1 -- Highest OI per OT

Но ако таблицата продължи да расте, това ще се представи зле. Можете да добавите таблица с история като OddsHistory и да преместите остарелите коефициенти там. Когато в таблицата с коефициенти има само най-новите коефициенти, заявката ви става много по-лесна.

Пример на живо в SQL Fiddle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как се среща с математика, която игнорира годината?

  2. Postgres:получава минимален и максимален брой редове в релационна таблица много към много

  3. Намерете всички таблици на дялове, наследени от главната таблица

  4. Езиковият локал на Heroku не работи

  5. Heroku on Rails - Невалиден DATABASE_URL