- Vì không có Khóa chính nào được xác định, tôi giả sử rằng dữ liệu được nhập theo thứ tự tuần tự trên
creation_date
vàladder_level
. Hãy nhớ dữ liệu đó được lưu trữ theo kiểu không có thứ tự trong MySQL. - Đầu tiên, chúng tôi phải sử dụng truy vấn chọn phụ để lấy dữ liệu theo thứ tự bắt buộc (như được đánh dấu trong bước trước). Đáng chú ý là
Order By
được thực thi sau khiSelect
mệnh đề; vì vậy, trước tiên chúng ta sẽ cần sắp xếp dữ liệu và sau đó sử dụng tập kết quả dưới dạng Bảng có nguồn gốc . - Bây giờ, chúng tôi sẽ nhờ sự trợ giúp của Người dùng- các biến xác định
(cấp độ phiên liên tục và có thể truy cập được). Trong một bảng dẫn xuất khác
user_init_vars
, chúng tôi khởi tạo chúng. - Trong
Select
, chúng tôi so sánh giá trị của hàng hiện tại với giá trị của hàng trước đó. Sau khi so sánh, chúng tôi đặt giá trị biến thành giá trị của hàng hiện tại. Bạn có thể coi nó là kỹ thuật lặp, chúng tôi sử dụng trong các ngôn ngữ lập trình khác như PHP, C ++, Java, v.v. -
Case .. When
các biểu thức được sử dụng để so sánh và xác địnhladder_change
giá trị.
Truy vấn số 1
SELECT
dt.ID,
CASE WHEN DATE(@rd) <> DATE(dt.record_date) AND
dt.ladder_level > @ll
THEN 1
ELSE 0
END AS ladder_change,
@rd := dt.record_date AS record_date,
@ll := dt.ladder_level AS ladder_level
FROM (SELECT ID, record_date, ladder_level
FROM conv_example
ORDER BY ID, record_date, ladder_level) AS dt
CROSS JOIN (SELECT @rd := '',
@ll := '') AS user_init_vars;
| ID | ladder_change | record_date | ladder_level |
| ----- | ------------- | ------------------- | ------------ |
| 324 | 0 | 2016-09-15 00:00:00 | a |
| 324 | 0 | 2016-09-15 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | e |
| 1234 | 0 | 2013-04-03 00:00:00 | |
| 1234 | 0 | 2014-07-03 00:00:00 | a |
| 1234 | 1 | 2015-04-01 00:00:00 | b |
| 1234 | 1 | 2016-09-15 00:00:00 | d |
| 1234 | 0 | 2017-02-04 00:00:00 | b |
| 1234 | 0 | 2017-04-03 00:00:00 | b |
| 1234 | 1 | 2017-04-07 00:00:00 | c1 |
| 1234 | 1 | 2018-09-08 00:00:00 | e |
| 31431 | 0 | 2013-04-03 00:00:00 | |
| 31431 | 0 | 2014-07-03 00:00:00 | a |
| 31431 | 1 | 2017-04-07 00:00:00 | c1 |
| 31431 | 1 | 2018-09-08 00:00:00 | e |