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

Jak uzyskać ostatni wiersz na grupę w PostgreSQL?

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ś!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Narzędzie GUI dla PostgreSQL

  2. Kombinacje zapytań z zagnieżdżoną tablicą rekordów w typie danych JSON

  3. Wnętrzności PostgreSQL:Co to jest „resjunk”?

  4. Czy można wyłączyć przetwarzanie ofert w poleceniu Postgres COPY w formacie CSV?

  5. Ustawianie limitu czasu połączenia z PDO