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

Tabela zapytań z array_agg/median WSZYSTKICH poprzednich pozycji, LAST_10, LAST_50, z wyłączeniem bieżącej pozycji

Postgres nie ma wbudowanej funkcji agregującej dla MEDIAN . Możesz go jednak utworzyć, korzystając z fragmentu funkcji dostępnego w wiki Postgres . Ten fragment jest również częścią biblioteki zdefiniowanej przez użytkownika ulib_agg .

Po utworzeniu możesz go używać jak dowolnej funkcji agregującej, takiej jak SUM lub STRING_AGG z podobnym window specyfikacja. Postgres umożliwia określenie wielu window definicje funkcji agregujących oddzielone przecinkiem.

Tak więc, aby uzyskać MEDIAN z poprzednich 20 rekordów, Twoje okno może być zdefiniowane tak, jak w tym zapytaniu.

SELECT 
j.* ,  array_agg(position) over w as previous_positions,
       median(position)    over w_20 as med_20
  FROM jockeys j
WINDOW w as
(  partition by name ORDER BY id rows between 
     unbounded preceding and 1 preceding
     ),
     w_20 as
     (  partition by name ORDER BY id rows between 
           20 preceding and 1 preceding
     )

Dodatkowo możesz zastosować ROUND funkcja, jeśli chcesz skrócić cyfry dziesiętne.

DEMO




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybrać pierwszy wiersz w każdej grupie GROUP BY?

  2. Usuwanie częściowo/całkowicie nakładających się zdarzeń z sygnaturami czasowymi rozpoczęcia i zakończenia w wielu wartościach

  3. sql ORDER BY wiele wartości w określonej kolejności?

  4. Wskazówki dotyczące wdrażania PostgreSQL w chmurze hybrydowej

  5. Ogólne rozwiązanie Ruby dla SQLite3 LIKE czy PostgreSQL ILIKE?