Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta MYSQL - obtém linhas onde o preço é alterado


Para algo assim, você precisa de duas passagens, porque você estará comparando cada linha com a anterior.

Uma dessas maneiras de fazer isso seria primeiro:
SET @lastprice = 0.0;

Então, sua "primeira passagem" ficará assim:
SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;

A ordem é importante aqui, pois você deseja construir uma linha do tempo cronológica.

Então, tudo o que você precisa fazer é recuperar as linhas desse resultado onde os preços antigos e novos são diferentes. Algo assim vai fazer:
SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;

Sua consulta final seria algo assim:
SET @lastprice = 0.0;
SELECT * FROM (
    SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
    FORM `tablename` ORDER BY `Date` ASC
) `tmp`
WHERE `oldprice` != `newprice`;

Como alternativa, você pode preferir usar uma tabela temporária para armazenar os resultados da subconsulta. Nesse caso, ficaria algo assim:
SET @lastprice = 0.0;
CREATE TEMPORARY TABLE `tmp`
    SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
    FROM `tablename` ORDER BY `Date` ASC;
SELECT * FROM `tmp` WHERE `oldprice` != `newprice`;
DROP TEMPORARY TABLE `tmp`;

A implementação exata depende de você, mas essa seria uma boa maneira de fazer isso.