Czasami może zajść potrzeba pobrania ostatniego wiersza tabeli lub ostatniego wiersza na grupę w PostgreSQL. Oto jak uzyskać ostatni rekord na grupę w PostgreSQL.
Pobierz ostatni wiersz tabeli
Załóżmy, że masz następującą tabelę PostgreSQL.
postgres=#create table product_sales(product varchar(10), order_date date, sale int); postgres=#insert into product_sales(product, order_date, sale) values('A','2020-05-01 03:00:00',250), ('B','2020-05-01 05:30:00',350), ('C','2020-05-01 07:45:00',1250), ('A','2020-05-02 02:34:00',450), ('B','2020-05-02 01:24:00',650), ('C','2020-05-02 12:34:00',1050), ('A','2020-05-03 04:00:45',150), ('B','2020-05-03 05:45:00',250), ('C','2020-05-03 09:50:00',1850); postgres=# select * from product_sales; product | order_date | sale ---------+---------------------+------ A | 2020-05-01 03:00:00 | 250 B | 2020-05-01 05:30:00 | 350 C | 2020-05-01 07:45:00 | 1250 A | 2020-05-02 02:34:00 | 450 B | 2020-05-02 01:24:00 | 650 C | 2020-05-02 12:34:00 | 1050 A | 2020-05-03 04:00:45 | 150 B | 2020-05-03 05:45:00 | 250 C | 2020-05-03 09:50:00 | 1850
Przeczytaj bonus:Funkcja tworzenia PostgreSQL
Oto zapytanie, aby uzyskać ostatni wiersz tabeli, w zależności od tego, jak są posortowane wiersze. W powyższym przykładzie, ponieważ nasze rekordy są dodawane według znacznika czasu, wybieramy wiersz z najnowszym znacznikiem czasu.
postgres=# select * from product_sales order by order_date desc limit 1; product | order_date | sale ---------+---------------------+------ C | 2020-05-03 09:50:00 | 1850
W powyższym zapytaniu sortujemy wiersze w kolejności malejącej według znacznika czasu i wybieramy pierwszy wiersz, używając klauzuli LIMIT.
Przeczytaj bonus:Schemat tworzenia PostgreSQL
Pobierz ostatni rekord na grupę
Oto zapytanie SQL, aby uzyskać ostatni wiersz na grupę, czyli każdy produkt.
postgres=# select distinct on (product) product, order_date, sale from product_sales order by product, order_date desc; product | order_date | sale ---------+---------------------+------ A | 2020-05-03 04:00:45 | 150 B | 2020-05-03 05:45:00 | 250 C | 2020-05-03 09:50:00 | 1850
W powyższym zapytaniu najpierw sortujemy wiersze według produktu (rosnąco) i data_zamówienia (malejąco). Następnie używamy klauzuli DISTINCT ON, aby wybrać tylko najwyższy rekord na grupę, który jest niczym innym jak ostatnim rekordem na grupę.
Przeczytaj bonus:Jak utworzyć histogram w PostgreSQL
Mamy nadzieję, że teraz możesz łatwo uzyskać ostatni wiersz na grupę w PostgreSQL.
Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!