PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zwróć wiersze, które mają maksymalnie jedną kolumnę w Postgresql

Postgres obsługuje funkcje okien które pasują do tej sytuacji:

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

Dla każdej kombinacji date , symbol , to zapytanie zwraca value i created_time z rzędu z najwyższym (tj. ostatni ) created_time tej date i symbol .

Sugerowałbym ten indeks:

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

To przykrycie index (posiada wszystkie wartości potrzebne do zapytania, eliminując potrzebę dostępu do rzeczywistej tabeli, a które już posiadałeś), ale zauważ, że created_time przychodzi przed value , więc dane są już w kolejności partycji, a value jest najmniej ważnym atrybutem, ponieważ nie bierze udziału w żadnym określaniu, który wiersz ma zostać zwrócony.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - wstawiaj wiersze na podstawie wyboru z innej tabeli i aktualizuj FK w tej tabeli za pomocą nowo wstawionych wierszy

  2. Czy wersja sterownika JDBC i wersja bazy danych muszą być dokładnie takie same?

  3. Jak uzyskać licznik niedzieli w bieżącym miesiącu w psql?

  4. Wybieranie losowych wierszy

  5. PostgreSQL - zmieniono wartość kolumny - wybierz optymalizację zapytania