Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL jak napisać SQL, aby znaleźć nadmierne transakcje w 15 minutowych oknach?

Możesz przekonwertować datę/godzinę na sekundy i wykonać arytmetykę sekund, aby uzyskać wartość w ciągu 15 minut zegara:

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;

Powyższe używa to_seconds() . We wcześniejszych wersjach MySQL możesz użyć unix_timestamp() .

Uzyskanie dowolnego 15-minutowego interwału jest trudniejsze. Możesz ekspresować zapytanie 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;

Wykonanie tego zapytania może być problematyczne. Indeks na trans(card_id, merchant_id, tran_dt) powinno bardzo pomó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. Blokada poziomu tabeli w trybie hibernacji

  2. Jak mogę użyć dwóch klauzul where w zapytaniu SQL?

  3. Partycjonowanie MySQL:dlaczego nie zajmuje odpowiedniej partycji

  4. Jak mogę wstawić arabskie słowo do bazy mysql za pomocą java?

  5. Problem z konfiguracją EF Core z posiadanym typem używanym w 2 różnych klasach