sql >> Databáze >  >> RDS >> Mysql

MYSQL dotaz - získat řádky, kde se mění cena

K něčemu takovému potřebujete dva průchody, protože budete porovnávat každý řádek s tím před ním.

Jedním ze způsobů, jak to udělat, by bylo nejprve:

SET @lastprice = 0.0;

Poté bude váš „první průchod“ vypadat takto:

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

Pořadí je zde důležité, protože chcete vytvořit chronologickou časovou osu.

Pak už jen stačí načíst řádky z tohoto výsledku, kde se staré a nové ceny liší. Něco takového udělá:

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

Váš poslední dotaz by vypadal asi takto:

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

Případně můžete dát přednost použití dočasné tabulky k uložení výsledků poddotazu. V tom případě by to vypadalo nějak takto:

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

Přesná implementace je na vás, ale toto by byl dobrý způsob, jak to udělat.




  1. Příkaz At-Sign v SQL před názvem sloupce

  2. Jak vytvořit formulář pomocí Průvodce formulářem

  3. odborová klauzule v sql

  4. Jak nasadit Percona XtraDB Cluster 8 pro vysokou dostupnost