Às vezes, você pode precisar comparar linhas sucessivas ou comparar cada linha com a linha anterior na tabela MySQL. Neste artigo, veremos como comparar duas linhas da mesma tabela usando autojunções. Você pode usá-lo para comparar linhas consecutivas ou obter a diferença entre duas linhas.
Como comparar linhas sucessivas no MySQL
Digamos que você tenha a seguinte tabela vendas (id, order_date, valor) e montante contém dados de vendas cumulativas totais.
mysql> create table sales(id int auto_increment primary key, order_date date, amount int); mysql> insert into sales(order_date, amount) values('2020-10-01',100), ('2020-10-02',125), ('2020-10-03',140), ('2020-10-04',160); mysql> select * from sales; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-10-01 | 100 | | 2 | 2020-10-02 | 125 | | 3 | 2020-10-03 | 140 | | 4 | 2020-10-04 | 160 | +------+------------+--------+
Bônus de leitura:Como comparar duas colunas no MySQL
Em nosso exemplo, se você quiser descobrir as vendas feitas em cada dia, precisará comparar o valor do valor de cada linha com o da linha anterior. Aqui está a consulta SQL para comparar cada linha com a linha anterior.
mysql> SELECT g1.id, g1.order_date,g1.amount, (g2.amount - g1.amount) AS daily_amount FROM sales g1 INNER JOIN sales g2 ON g2.id = g1.id + 1; +------+------------+--------+--------------+ | id | order_date | amount | daily_amount | +------+------------+--------+--------------+ | 1 | 2020-10-01 | 100 | 25 | | 2 | 2020-10-02 | 125 | 15 | | 3 | 2020-10-03 | 140 | 20 | +------+------------+--------+--------------+
Na consulta acima, juntamos a tabela de vendas com ela mesma usando uma condição INNER JOIN g2.id=g1.id + 1 que permite comparar cada linha com sua linha anterior.
Bônus de leitura:Como obter cada enésima linha no MySQL
Observe que essa condição depende do fato de nossa coluna id ter números consecutivos. A maioria das tabelas tem uma coluna de chave primária de incremento automático, portanto, deve funcionar na maioria dos casos. Se eles diferirem por alguma outra constante, você pode modificar a condição INNER JOIN de acordo.
Espero que agora você possa comparar facilmente duas linhas na mesma tabela no MySQL.
O Ubiq facilita a visualização de dados e o monitoramento em painéis em tempo real. Experimente o Ubiq gratuitamente.