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

Come ottenere l'ultima riga per gruppo in PostgreSQL

A volte potrebbe essere necessario ottenere l'ultima riga della tabella o l'ultima riga per gruppo in PostgreSQL. Ecco come ottenere l'ultimo record per gruppo in PostgreSQL.


Ottieni l'ultima riga della tabella

Supponiamo che tu abbia la seguente tabella 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

Bonus Lettura:funzione di creazione di PostgreSQL


Ecco la query per ottenere l'ultima riga della tabella, a seconda di come sono ordinate le righe. Nell'esempio precedente, poiché i nostri record vengono aggiunti in base al timestamp, selezioniamo la riga con il timestamp più recente.

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

Nella query precedente, ordiniamo le righe in ordine decrescente di timestamp e selezioniamo la prima riga utilizzando la clausola LIMIT.

Bonus Lettura:PostgreSQL Crea Schema



Ottieni l'ultimo record per gruppo

Ecco la query SQL per ottenere l'ultima riga per gruppo, ovvero ogni prodotto.

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

Nella query precedente, prima ordiniamo le righe per prodotto (crescente) e data_ordine (discendente). Quindi utilizziamo la clausola DISTINCT ON per selezionare solo il record superiore per gruppo, che non è altro che l'ultimo record per gruppo.

Bonus Leggi:Come creare istogramma in PostgreSQL

Si spera che ora tu possa facilmente ottenere l'ultima riga per gruppo in PostgreSQL.

Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!