sql >> Database >  >> RDS >> Mysql

SQL hoe resultaat rij 1 af te trekken van rij 2, rij 2 van rij 3

U wilt waarschijnlijk de door de gebruiker gedefinieerde variabelen , en dan wil je waarschijnlijk zoiets als dit doen:

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)

Ik heb de syntaxis niet gecontroleerd, dus het kan een beetje afwijken, maar dat is het algemene idee. Merk op dat ik de datum heb toegevoegd zodat je er op kunt bestellen, anders zijn de resultaten mogelijk zinloos.

BEWERKEN:

Ik heb dit zojuist op mijn computer uitgevoerd:

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. Deel 2 – Een groot databasediagram organiseren?

  2. Hoe een kolom wijzigen en de standaardwaarde wijzigen?

  3. Wat betekent het om een ​​Microsoft Access-database te splitsen?

  4. De opslag-engine voor de tabel biedt geen ondersteuning voor reparatie. InnoDB of MyISAM?