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

Permintaan MYSQL - dapatkan baris tempat harga diubah

Untuk hal seperti ini, Anda memerlukan dua lintasan, karena Anda akan membandingkan setiap baris dengan yang sebelumnya.

Salah satu cara untuk melakukan ini adalah dengan pertama:

SET @lastprice = 0.0;

Kemudian, "pass pertama" Anda akan terlihat seperti:

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

Urutannya penting di sini, karena Anda ingin membuat garis waktu kronologis.

Kemudian, yang perlu Anda lakukan adalah mengambil baris dari hasil ini di mana harga lama dan baru berbeda. Sesuatu seperti ini akan berhasil:

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

Permintaan terakhir Anda akan terlihat seperti ini:

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

Atau, Anda mungkin lebih suka menggunakan tabel sementara untuk menyimpan hasil subquery. Dalam hal ini, akan terlihat seperti ini:

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

Implementasi yang tepat terserah Anda, tetapi ini akan menjadi cara yang baik untuk melakukannya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bantuan dengan sintaks pilih sql

  2. Perilaku casting aneh di mysql

  3. panggil prosedur database sederhana menggunakan Slick 3.0

  4. Apa perbedaan antara Is Not Null dan Not Is Null?

  5. Lingkaran kursor MYSQL, menjalankan satu putaran tambahan, mengapa?