Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL заявка - вземете редове, където цената е променена

За нещо подобно се нуждаете от две преминавания, защото ще сравнявате всеки ред с този преди него.

Един такъв начин да направите това е първо:

SET @lastprice = 0.0;

Тогава вашето „първо преминаване“ ще изглежда така:

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

Редът е важен тук, тъй като искате да изградите хронологична времева линия.

След това всичко, което трябва да направите, е да извлечете редовете от този резултат, където старите и новите цени са различни. Нещо подобно ще свърши работа:

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

Последната ви заявка ще изглежда така:

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

Като алтернатива можете да предпочетете да използвате временна таблица за съхраняване на резултатите от подзаявката. В такъв случай ще изглежда така:

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

Точното изпълнение зависи от вас, но това би бил добър начин да го направите.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Посочване на псевдоним на колона с дефинирана от потребител променлива

  2. Вмъкване с помощта на PreparedStatement. Как да увелича автоматично идентификатора?

  3. Условно вмъкване въз основа на LAST_INSERT_ID

  4. MySQL - ИЗБЕРЕТЕ, ПРИСЪЕДИНЕТЕ

  5. Laravel получава най-новия запис за всяка група