sql >> Databasteknik >  >> RDS >> Mysql

MYSQL-fråga - få rader där priset ändras

För något sådant här behöver du två pass, eftersom du kommer att jämföra varje rad med den före den.

Ett sådant sätt att göra detta är att först:

SET @lastprice = 0.0;

Sedan kommer ditt "första pass" att se ut så här:

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

Ordningen är viktig här, eftersom du vill bygga en kronologisk tidslinje.

Sedan är allt du behöver göra att hämta raderna från detta resultat där de gamla och nya priserna är olika. Något liknande detta kommer att göra:

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

Din sista fråga skulle se ut ungefär så här:

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

Alternativt kanske du föredrar att använda en tillfällig tabell för att lagra underfrågans resultat. I så fall skulle det se ut ungefär så här:

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

Den exakta implementeringen är upp till dig, men det här skulle vara ett bra sätt att göra det.




  1. Django makemigrations Inga ändringar upptäcktes i appen

  2. node-mysql vart tar connection.end() vägen

  3. Kan plv8 JavaScript-språktillägg anropa tredje parts bibliotek?

  4. Finns det en utf8_unicode_cs-kollation?