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

MySQL làm thế nào để viết SQL để tìm các giao dịch quá mức trong các cửa sổ 15 phút?

Bạn có thể chuyển đổi ngày / giờ thành giây và tính toán số học trên giây để nhận giá trị trong khoảng thời gian đồng hồ 15 phút:

select card_id, min(date(tran_dt)) as first_charge_time, merchant_id, count(*)
from tran
group by card_id, floor(to_seconds(tran_dt) / (60 * 15)), merchant_id
having count(*) >= 3;

Ở trên sử dụng to_seconds() . Trong các phiên bản MySQL cũ hơn, bạn có thể sử dụng unix_timestamp() .

Thực hiện bất kỳ khoảng thời gian 15 phút nào sẽ khó hơn. Bạn có thể bày tỏ truy vấn dưới dạng:

select t1.*, count(*) as numTransactions
from tran t1 join
     tran t2
     on t1.merchant_id = t2.merchanti_d and
        t1.card_id = t2.card_id and
        t2.tran_dt >= t1.tran_dt and
        t2.tran_dt < t1.tran_dt + interval 15 minute 
group by t1.id
having numTransactions >= 3;

Hiệu suất của truy vấn này có thể có vấn đề. Chỉ mục trên trans(card_id, merchant_id, tran_dt) sẽ giúp ích rất nhiều.



  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 chèn một đối tượng (hơn 10 thuộc tính) vào mysql thông qua mybatis dựa trên chú thích mà không liệt kê tất cả các thuộc tính

  2. Kiểu dữ liệu xếp hạng 5 sao của MySQL?

  3. Làm thế nào tôi có thể tạo trình cài đặt cho trang web. Mysql PHP

  4. Phân tích cú pháp dấu thời gian - làm điều đó trong MySQL hoặc trong PHP?

  5. Tính toán delta (sự khác biệt của hàng hiện tại và hàng trước đó) nhóm mysql theo cột cụ thể