sql >> Database >  >> RDS >> PostgreSQL

Hoe de laatste rij per groep te krijgen in PostgreSQL

Soms moet u de laatste rij van de tabel of de laatste rij per groep in PostgreSQL krijgen. Hier leest u hoe u het laatste record per groep in PostgreSQL kunt krijgen.


Laatste rij van tabel ophalen

Stel dat u de volgende PostgreSQL-tabel heeft.

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

Bonus lezen:PostgreSQL-aanmaakfunctie


Dit is de vraag om de laatste rij van de tabel te krijgen, afhankelijk van hoe uw rijen zijn gesorteerd. In het bovenstaande voorbeeld, aangezien onze records worden toegevoegd op tijdstempel, selecteren we de rij met de laatste tijdstempel.

postgres=# select * from product_sales 
           order by order_date desc
           limit 1;
 product |     order_date      | sale
---------+---------------------+------
 C       | 2020-05-03 09:50:00 | 1850

In de bovenstaande zoekopdracht sorteren we de rijen in aflopende volgorde van tijdstempel en selecteren we de bovenste 1 rij met behulp van de LIMIT-clausule.

Bonus Lezen:PostgreSQL Schema maken



Laatste record per groep ophalen

Hier is de SQL-query om de laatste rij per groep te krijgen, dat wil zeggen elk product.

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

In de bovenstaande zoekopdracht sorteren we eerst de rijen op product (oplopend) en order_date (aflopend). Vervolgens gebruiken we de clausule DISTINCT ON om alleen het bovenste record per groep te selecteren, wat niets anders is dan het laatste record per groep.

Bonus Lezen:Histogram maken in PostgreSQL

Hopelijk kun je nu gemakkelijk de laatste rij per groep in PostgreSQL krijgen.

Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!

  1. LOCALTIME-voorbeelden - MySQL

  2. REGEXP_COUNT() Functie in Oracle

  3. Beste databasesoftware voor ontwikkelaars (2022-editie)

  4. De 'laatste' rij van elke 'groeperen op' retourneren in MySQL