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

Tính toán sự khác biệt trên hàng ngày giờ đặt cược giữa các hàng trên cùng một bảng

Giả sử luôn có một điểm bắt đầu cho mỗi lần tạm dừng và kết thúc, chẳng phải những thứ như thế này sẽ trực tiếp hơn sao?

SELECT t.task
   , SUM(TO_SECONDS(t.stime) 
         * CASE WHEN t.status IN (1) THEN -1
                WHEN t.status IN (2, 3) THEN 1
                ELSE 0
           END
     ) AS totalTimeSecs
FROM tblwork AS task
GROUP BY t.task

Tôi không chắc chắn về giá trị xuất phát từ TO_SECONDS () đối với dấu thời gian hiện tại lớn như thế nào; nhưng nếu chúng là một vấn đề khi được tổng hợp, nếu có thể được thay đổi thành

   , SUM((TO_SECONDS(t.stime) - some_constant_just_before_or_at_your_earliest_seconds)
         * CASE WHEN t.status IN (1) THEN -1
                WHEN t.status IN (2, 3) THEN 1
                ELSE 0
           END
     ) AS totalTimeSecs

Bạn có thể phát hiện dữ liệu "bất thường" bằng cách thêm thông tin sau vào danh sách biểu thức đã chọn

, CASE WHEN SUM(CASE 
                WHEN t.status IN (1) THEN -1 
                WHEN t.status IN (2, 3) THEN 1 
                ELSE 0 END
              ) = 0 
       THEN 'OK' 
       ELSE 'ABNORMAL' 
   END AS integrityCheck

Lưu ý:bất kỳ khoảng thời gian "không được tiết lộ" nào sẽ được đánh dấu là bất thường; mà không cần kiểm tra khoảng thời gian bắt đầu và kết thúc phức tạp và tốn kém hơn nhiều để phân biệt "mở" với "không hợp lệ", đó có lẽ là cách tốt nhất có thể được thực hiện. Tổng được sử dụng cho "Kiểm tra toàn vẹn" bổ sung bằng -1 có thể gợi ý về khoảng thời gian kết thúc mở, nhưng cũng có thể chỉ ra một lần bắt đầu kép không chính xác.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thao tác xóa mysql

  2. Tôi có nên sử dụng kết nối liên tục mysql không?

  3. LINQ to SQL nhiều bảng bên trái kết hợp bên ngoài

  4. Cách lấy nhiều hàng từ cơ sở dữ liệu trong PHP

  5. DataTables trang 2 của phân trang không gọi Magnific Popup