Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn MYSQL - nhận các hàng trong đó giá được thay đổi

Đối với những thứ như thế này, bạn cần hai lần vượt qua, bởi vì bạn sẽ so sánh từng hàng với hàng trước nó.

Một trong những cách làm như vậy trước tiên là:

SET @lastprice = 0.0;

Sau đó, "thẻ đầu tiên" của bạn sẽ có dạng:

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

Thứ tự rất quan trọng ở đây, vì bạn muốn xây dựng tiến trình theo thứ tự thời gian.

Sau đó, tất cả những gì bạn cần làm là truy xuất các hàng từ kết quả này, nơi giá cũ và giá mới khác nhau. Một cái gì đó như thế này sẽ làm:

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

Truy vấn cuối cùng của bạn sẽ trông giống như sau:

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

Ngoài ra, bạn có thể thích sử dụng một bảng tạm thời để lưu trữ các kết quả truy vấn con. Trong trường hợp đó, nó sẽ trông giống như thế này:

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

Việc triển khai chính xác là tùy thuộc vào bạn, nhưng đây sẽ là một cách tốt để thực hiện.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đạt được Dự phòng &Dự phòng MySQL trên Google Cloud Platform (GCP)

  2. SQL Làm thế nào để tạo giá trị cho một cột mới dựa trên số lượng một cột hiện có theo nhóm?

  3. Bảo mật cơ bản, PHP mySQl

  4. Tìm nạp tất cả tin tức và tất cả các bình luận

  5. Cách hàm UPPER () hoạt động trong MySQL