PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment obtenir la dernière ligne par groupe dans PostgreSQL

Parfois, vous devrez peut-être obtenir la dernière ligne de la table ou obtenir la dernière ligne par groupe dans PostgreSQL. Voici comment obtenir le dernier enregistrement par groupe dans PostgreSQL.


Obtenir la dernière ligne du tableau

Disons que vous avez la table PostgreSQL suivante.

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

Lecture bonus :fonction de création PostgreSQL


Voici la requête pour obtenir la dernière ligne du tableau, en fonction de la façon dont vos lignes sont triées. Dans l'exemple ci-dessus, puisque nos enregistrements sont ajoutés par horodatage, nous sélectionnons la ligne avec le dernier horodatage.

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

Dans la requête ci-dessus, nous trions les lignes par ordre décroissant d'horodatage et sélectionnons la première ligne à l'aide de la clause LIMIT.

Lecture bonus :Créer un schéma PostgreSQL



Obtenir le dernier enregistrement par groupe

Voici la requête SQL pour obtenir la dernière ligne par groupe, c'est-à-dire chaque produit.

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

Dans la requête ci-dessus, nous trions d'abord les lignes par produit (croissant) et order_date (descendant). Ensuite, nous utilisons la clause DISTINCT ON pour sélectionner uniquement le premier enregistrement par groupe, qui n'est rien d'autre que le dernier enregistrement par groupe.

Lecture bonus :comment créer un histogramme dans PostgreSQL

J'espère que vous pouvez maintenant facilement obtenir la dernière ligne par groupe dans PostgreSQL.

Ubiq facilite la visualisation des données en quelques minutes et la surveillance dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !