sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan får du sidste række pr. gruppe i PostgreSQL

Nogle gange skal du muligvis hente sidste række af tabellen eller få sidste række per gruppe i PostgreSQL. Sådan får du sidste rekord pr. gruppe i PostgreSQL.


Hent sidste række af tabellen

Lad os sige, at du har følgende PostgreSQL-tabel.

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 Læs:PostgreSQL Create Function


Her er forespørgslen for at få sidste række i tabellen, afhængigt af hvordan dine rækker er sorteret. I ovenstående eksempel, da vores registreringer er tilføjet efter tidsstempel, vælger vi rækken med seneste tidsstempel.

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

I ovenstående forespørgsel sorterer vi rækkerne i faldende rækkefølge efter tidsstemplet og vælger den øverste række ved hjælp af LIMIT-sætning.

Bonus Læs:PostgreSQL Opret skema



Få sidste rekord pr. gruppe

Her er SQL-forespørgslen for at få sidste række pr. gruppe, det vil sige hvert 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

I ovenstående forespørgsel sorterer vi først rækkerne efter produkt (stigende) og ordre_date (aftagende). Så bruger vi DISTINCT ON-klausulen til kun at vælge den øverste post pr. gruppe, som ikke er andet end den sidste post pr. gruppe.

Bonus Læs:Sådan opretter du histogram i PostgreSQL

Forhåbentlig kan du nu nemt få den sidste række pr. gruppe i PostgreSQL.

Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!

  1. Sådan får du en liste over tabeller uden primær nøglebegrænsning i SQL Server-databasen - SQL Server / T-SQL vejledning del 58

  2. Sådan forbinder du Android med MySQL ved hjælp af Mysql JDBC-driver

  3. Får maks. værdi fra rækker og forbinder til en anden tabel

  4. ClusterControl - Advanced Backup Management - mariabackup del I