Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQL cara mengurangi hasil baris 1 dari baris 2, baris 2 dari baris 3

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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara termudah untuk menyalin database MySQL?

  2. Permata MySQL2 Ruby tidak akan Menginstal 10.6

  3. cara mendapatkan jumlah baris total dengan mysqli

  4. Bagaimana cara membandingkan string versi (x.y.z) di MySQL?

  5. django.db.utils.OperationalError:(2026, 'kesalahan koneksi SSL:SSL_CTX_set_tmp_dh gagal')