Mysql
 sql >> Database >  >> RDS >> Mysql

Query MySQL:ottieni le righe in cui il prezzo viene modificato

Per qualcosa del genere, hai bisogno di due passaggi, perché confronterai ogni riga con quella precedente.

Uno di questi modi per farlo sarebbe prima:

SET @lastprice = 0.0;

Quindi, il tuo "primo passaggio" sarà simile a:

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

L'ordine è importante qui, poiché vuoi costruire una sequenza temporale cronologica.

Quindi, tutto ciò che devi fare è recuperare le righe da questo risultato in cui i prezzi vecchi e nuovi sono diversi. Qualcosa del genere andrà bene:

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

La tua domanda finale sarebbe simile a questa:

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

In alternativa, potresti preferire utilizzare una tabella temporanea per memorizzare i risultati della sottoquery. In tal caso, sarebbe simile a questo:

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

L'esatta implementazione dipende da te, ma questo sarebbe un buon modo per farlo.