Truy vấn đầu tiên của bạn tốt hơn bạn nên viết nó như thế này:
« trường hợp khi (current_level =200 AND current_level <> @lev) thì 1 kết thúc khác 0) là TIMES, nếu (current_level =200 AND current_level <> @lev, @lev:=current_level, 0) NHƯ vô dụng3 TỪ sensor_logs, (CHỌN @ id:='none', @lev:=10) var_init_subquery ĐẶT HÀNG THEO hướng dẫnKhông chỉ thực hiện thứ tự rõ ràng khi cần thiết, không phải trong một truy vấn con, việc thực hiện nó trong một truy vấn con cũng có thể dẫn đến một kế hoạch thực thi không tốt (có nghĩa là hiệu suất kém trong trường hợp bảng tạm thời).
Đối với kết quả cuối cùng của bạn, bạn không nên áp dụng trực tiếp GROUP BY, v.v. CHỌN (và do đó, các biến và phép tính của bạn) được đánh giá sau NHÓM BẰNG. Để thực hiện nhóm sau khi tính toán, hãy đặt truy vấn của bạn vào một truy vấn con:
CHỌN hướng dẫn, SUM (lần) TỪ (SELECT hướng dẫn, current_level, nếu (@id <> hướng dẫn, @lev:=10, 0) NHƯ vô dụng, trường hợp khi @id <> hướng dẫn thì @id:=guide else 0 end AS nothing2, (trường hợp khi (current_level =200 AND current_level <> @lev) thì 1 else 0 end) là TIMES, nếu (current_level =200 AND current_level <> @lev, @lev:=current_level, 0 ) NHƯ vô dụng3 TỪ sensor_logs, (SELECT @id:='none', @lev:=10) var_init_subquery ORDER BY Guid) sqGROUP THEO hướng dẫn