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

SQL Return 1,0 trong biến mới dựa trên trường hợp khi câu lệnh tham chiếu đến nhiều biến khác

  • 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_dateladder_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 khi Select 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 định ladder_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            |

Xem trên DB Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lưu trữ hình ảnh trong cơ sở dữ liệu mysql bằng php

  2. Cách nhập LARGE tệp sql vào bảng mysql

  3. Swift httppost dữ liệu không chèn vào cơ sở dữ liệu MySQL

  4. Gọi một tập lệnh PHP từ trình kích hoạt MySQL

  5. Kết nối trái điều kiện ON VÀ cú pháp điều kiện khác trong Doctrine