Anda mungkin ingin melihat variabel yang ditentukan pengguna , lalu Anda mungkin ingin melakukan sesuatu seperti ini:
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)
Saya belum memeriksa sintaks jadi mungkin sedikit salah tetapi itu adalah ide umum. Perhatikan bahwa saya menambahkan tanggal sehingga Anda dapat memesannya, jika tidak, hasilnya mungkin tidak berarti.
EDIT:
Jalankan saja ini di komputer saya:
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)