Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL 15 मिनट की विंडो में अत्यधिक लेनदेन खोजने के लिए SQL कैसे लिखें?

आप दिनांक/समय को सेकंड में बदल सकते हैं और 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() uses का उपयोग करता है . 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. एक ही क्वेरी में अलग-अलग मानों के साथ कई पंक्तियों को अपडेट करें - MySQL

  2. चुनिंदा क्वेरी में एकल IF में एकाधिक स्थिति

  3. ODBC डेटाबेस इनपुट को कैसे सैनिटाइज करें?

  4. स्वचालित AJAX हमलों को कैसे रोकें

  5. MySQL ट्रिगर्स के साथ CONCAT का उपयोग करना (त्रुटि पर,)