Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL как да напиша SQL за намиране на прекомерни транзакции в 15-минутни прозорци?

Можете да конвертирате датата/часа в секунди и да извършите аритметика със секундите, за да получите стойността в рамките на 15-минутен часовников интервал:

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;

Горното използва to_seconds() . В по-ранните версии на MySQL можете да използвате unix_timestamp() .

Постигането на интервал от 15 минути е по-трудно. Можете да изразите заявката като:

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;

Изпълнението на тази заявка може да е проблематично. Индекс на trans(card_id, merchant_id, tran_dt) трябва да помогне много.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въпрос за дизайн на DB относно външни ключове с нула и нормализиране

  2. Грешка в MySQL/Writing File (Errcode 28)

  3. Съображения за DevOps за внедряване на готови за производство бази данни

  4. Как да проверя дали MySQL заявка с помощта на наследения API е била успешна?

  5. Запазители с множество имена на PDO не извличат данни