sql >> Databáze >  >> RDS >> Mysql

MySQL, jak napsat SQL, abyste našli nadměrné transakce v 15 minutových oknech?

Můžete převést datum/čas na sekundy a provést aritmetiku v sekundách, abyste získali hodnotu v intervalu 15 minut:

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;

Výše uvedené používá to_seconds() . V dřívějších verzích MySQL můžete použít unix_timestamp() .

Získat jakýkoli 15minutový interval je náročnější. Můžete vyjádřit dotaz jako:

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;

Výkon tohoto dotazu může být problematický. Index na trans(card_id, merchant_id, tran_dt) by měl hodně pomoci.



  1. Jak POSITION() funguje v MariaDB

  2. Změna pořadí záznamů PostgreSQL pomocí aktualizace s dílčím výběrem

  3. Clash typu operandu:varchar je nekompatibilní s varchar(50), který se pokouší vložit do šifrované databáze

  4. 3 způsoby, jak spočítat počet systémových tabulek v databázi SQL Server