sql >> Databáze >  >> RDS >> PostgreSQL

Vraťte řádky, které mají v Postgresql maximálně jeden sloupec

Postgres podporuje funkce oken které vyhovují této situaci:

select date, symbol, value, created_time
from (select *,
    rank() over (partition by date, symbol order by created_time desc) as rownum
  from test_table) x
where rownum = 1

Pro každou kombinaci date , symbol , tento dotaz vrátí value a created_time z řádku s nejvyšší (tj. poslední ) created_time tohoto date a symbol .

Navrhoval bych tento index:

CREATE UNIQUE INDEX test_table_idx 
  ON test_table (date, symbol, created_time, value)

Je to krytí index (má všechny hodnoty, které potřebujete pro dotaz, čímž se vyhnete nutnosti přístupu ke skutečné tabulce a které jste již měli), ale všimněte si, že created_time přichází před value , takže data jsou již v pořadí oddílů a value je nejméně důležitý atribut, protože se nepodílí na žádném určování, který řádek má být vrácen.



  1. Vytvořte pouze JEDNU tabulku pomocí Flask + SqlAlchemy

  2. Získejte všechny sekvenční bloky ze seznamu

  3. Vyberte data z DB na základě vstupu uživatele

  4. Jak používat modely django s cizími klíči v různých databázích?