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 !