आप दिनांक/समय को सेकंड में बदल सकते हैं और 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)
. पर एक इंडेक्स बहुत मदद करनी चाहिए।