sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man får sista raden per grupp i PostgreSQL

Ibland kan du behöva få sista raden i tabellen eller få sista raden per grupp i PostgreSQL. Så här får du sista posten per grupp i PostgreSQL.


Hämta sista raden i tabellen

Låt oss säga att du har följande PostgreSQL-tabell.

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 Skapa funktion


Här är frågan för att få sista raden i tabellen, beroende på hur dina rader är sorterade. I exemplet ovan, eftersom våra poster läggs till efter tidsstämpel, väljer vi raden med senaste tidsstämpel.

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 frågan ovan sorterar vi raderna i fallande ordning efter tidsstämpel och väljer den översta raden med hjälp av LIMIT-satsen.

Bonus Läs:PostgreSQL Skapa Schema



Få senaste posten per grupp

Här är SQL-frågan för att få sista raden per grupp, det vill säga varje 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 ovanstående fråga sorterar vi först raderna efter produkt (stigande) och order_date (nedåtgående). Sedan använder vi DISTINCT ON-satsen för att bara välja den översta posten per grupp, vilket inte är något annat än den sista posten per grupp.

Bonus Läs:Hur man skapar histogram i PostgreSQL

Förhoppningsvis kan du nu enkelt få den sista raden per grupp i PostgreSQL.

Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. Hur tar jag bort specifika rader i SQLite Database

  2. Jämför replikeringslösningar från Oracle och MySQL

  3. Hur man återställer WordPress Admin Password via MySQL Command Prompt

  4. PostgreSQL återkallar behörigheter från pg_catalog-tabeller