PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como obter a última linha por grupo no PostgreSQL


Às vezes você pode precisar obter a última linha da tabela ou obter a última linha por grupo no PostgreSQL. Veja como obter o último registro por grupo no PostgreSQL.



Obter a última linha da tabela


Digamos que você tenha a seguinte tabela 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

Bônus de leitura:Função de criação do PostgreSQL




Aqui está a consulta para obter a última linha da tabela, dependendo de como suas linhas são classificadas. No exemplo acima, como nossos registros são adicionados por timestamp, selecionamos a linha com o timestamp mais 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

Na consulta acima, classificamos as linhas em ordem decrescente de timestamp e selecionamos a primeira linha usando a cláusula LIMIT.

Bônus de leitura:PostgreSQL Criar Esquema




Obter o último registro por grupo


Aqui está a consulta SQL para obter a última linha por grupo, ou seja, cada produto.
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

Na consulta acima, primeiro classificamos as linhas por produto (crescente) e order_date (descendente). Em seguida, usamos a cláusula DISTINCT ON para selecionar apenas o registro superior por grupo, que nada mais é do que o último registro por grupo.

Bônus de leitura:Como criar histograma no PostgreSQL

Felizmente, agora você pode obter facilmente a última linha por grupo no PostgreSQL.

O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!