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

SQL как да извадите резултатен ред 1 от ред 2, ред 2 от ред 3

Вероятно искате да разгледате потребителски дефинирани променливи на MySQL , а след това вероятно искате да направите нещо подобно:

SET @prev := NULL;
SELECT
    DATE(created_at),
    price - COALESCE(@prev, price) AS price_change,
    name,
    (@prev := price) AS price FROM (
        SELECT * FROM items ORDER BY DATE(created_at)
    ) t1
GROUP BY
    name, price, DATE(created_at)
HAVING name = 'Ibuprofen'
ORDER BY DATE(created_at);
Query OK, 0 rows affected (0.00 sec)

Не съм проверил синтаксиса, така че може да е малко неправилно, но това е общата идея. Имайте предвид, че добавих дата, за да можете да поръчате по нея, в противен случай резултатите може да са безсмислени.

РЕДАКТИРАНЕ:

Току-що стартирах това на моята машина:

SET @prev := NULL;
SELECT
    DATE(created_at),
    price - COALESCE(@prev, price) AS price_change,
    name,
    (@prev := price) AS price FROM (
        SELECT * FROM items ORDER BY DATE(created_at)
    ) t1
GROUP BY
    name, price, DATE(created_at)
HAVING name = 'Ibuprofen'
ORDER BY DATE(created_at);

Query OK, 0 rows affected (0.00 sec)

+------------------+--------------+-----------+-------+
| DATE(created_at) | price_change | name      | price |
+------------------+--------------+-----------+-------+
| 2018-12-10       |            0 | Ibuprofen |   110 |
| 2018-12-13       |          -10 | Ibuprofen |   100 |
| 2018-12-13       |           20 | Ibuprofen |   120 |
+------------------+--------------+-----------+-------+

3 rows in set, 1 warning (0.00 sec)

SELECT * FROM items;
+----+-------+----------------+---------------------+
| id | price | name           | created_at          |
+----+-------+----------------+---------------------+
|  8 |   100 | Ibuprofen      | 2018-12-13 12:52:35 |
|  9 |   110 | Ibuprofen      | 2018-12-10 12:12:12 |
| 10 |   120 | Ibuprofen      | 2018-12-13 12:52:35 |
| 11 |  1000 | Something else | 2018-12-13 13:01:19 |
+----+-------+----------------+---------------------+

4 rows in set (0.00 sec)


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

  2. Променено PDO::ATTR_EMULATE_PREPARES на FALSE и получаване на грешка при невалиден номер на параметър

  3. MySQL:Отказан достъп на потребителя до базата данни

  4. Как да получа стойността на IDENTITY / AUTONUMBER за реда, който вмъкнах в pymysql

  5. MySQL оптимизация на огромна таблица