sql >> Base de Datos >  >> RDS >> Mysql

Consulta MYSQL:obtenga filas donde se cambia el precio

Para algo como esto, necesita dos pases, porque comparará cada fila con la anterior.

Una de esas formas de hacer esto sería primero:

SET @lastprice = 0.0;

Entonces, su "primer paso" se verá así:

SELECT `Date`, @lastprice AS `oldprice`, @lastprice := `price` AS `newprice`
FROM `tablename` ORDER BY `Date` ASC;

El orden es importante aquí, ya que desea construir una línea de tiempo cronológica.

Luego, todo lo que necesita hacer es recuperar las filas de este resultado donde los precios antiguos y nuevos son diferentes. Algo como esto servirá:

SELECT * FROM ("Above subquery here") `tmp` WHERE `oldprice` != `newprice`;

Su consulta final se vería así:

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`;

Alternativamente, puede preferir usar una tabla temporal para almacenar los resultados de la subconsulta. En ese caso, sería algo como esto:

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`;

La implementación exacta depende de usted, pero esta sería una buena forma de hacerlo.