sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo obtener la última fila por grupo en PostgreSQL

A veces, es posible que necesite obtener la última fila de la tabla o la última fila por grupo en PostgreSQL. Aquí se explica cómo obtener el último registro por grupo en PostgreSQL.


Obtener la última fila de la tabla

Digamos que tiene la siguiente tabla de 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

Lectura adicional:función de creación de PostgreSQL


Esta es la consulta para obtener la última fila de la tabla, según cómo se ordenen las filas. En el ejemplo anterior, dado que nuestros registros se agregan por marca de tiempo, seleccionamos la fila con la última marca de tiempo.

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

En la consulta anterior, ordenamos las filas en orden descendente de marca de tiempo y seleccionamos la primera fila usando la cláusula LIMIT.

Lectura adicional:esquema de creación de PostgreSQL



Obtener el último registro por grupo

Aquí está la consulta SQL para obtener la última fila por grupo, es decir, cada producto.

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

En la consulta anterior, primero ordenamos las filas por producto (ascendente) y order_date (descendiendo). Luego usamos la cláusula DISTINCT ON para seleccionar solo el registro superior por grupo, que no es más que el último registro por grupo.

Lectura adicional:Cómo crear un histograma en PostgreSQL

Con suerte, ahora puede obtener fácilmente la última fila por grupo en PostgreSQL.

Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!