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

Ефективна заявка за последен запис с Postgresql

Ако не искате да промените своя модел на данни, можете да използвате DISTINCT ON за извличане на най-новия запис от таблица "b" за всеки запис в "a":

SELECT DISTINCT ON (a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY a.id, b.date DESC

Ако искате да избегнете „сортиране“ в заявката, добавянето на индекс като този може да ти помогна, но не съм сигурен:

CREATE INDEX b_id_date ON b (id, date DESC)

SELECT DISTINCT ON (b.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY b.id, b.date DESC

Като алтернатива, ако искате да сортирате записи от таблица "a" по някакъв начин:

SELECT DISTINCT ON (sort_column, a.id) *
FROM a
INNER JOIN b ON a.id=b.id
ORDER BY sort_column, a.id, b.date DESC

Алтернативни подходи

Всички горепосочени заявки обаче трябва да прочетат всички посочени редове от таблица "b", така че ако имате много данни, може пак да е твърде бавно.

Можете да създадете нова таблица, която съдържа само най-новия запис "b" за всеки a.id -- или дори да преместите тези колони в самата таблица "a".



  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. Какъв трябва да бъде типът на параметъра в Java, когато е клеймо за време без часова зона в postgresql?

  3. Има ли опции за таблица за присъединяване за асоциации много към много?

  4. Spark SQL 2.0:NullPointerException с валидна заявка за PostgreSQL

  5. Не може да се конфигурира AspNet.Identity с помощта на PostgreSQL