MySQL
Допустим, есть компания по обработке кредитных карт. Каждый раз, когда используется кредитная карта, строка вставляется в таблицу.
create table tran(
id int,
tran_dt datetime,
card_id int,
merchant_id int,
amount int
);
Один хочет узнать, какие карты использовались 3 раза в любом 15-минутном окне у того же торговца.
Моя попытка:
select card_id, date(tran_dt), hour(tran_dt), merchant_id, count(*)
from tran
group by card_id, date(tran_dt), hour(tran_dt), merchant_id
having count(*)>=3
Первая проблема заключается в том, что они будут давать чрезмерные транзакции в час, а не за 15-минутное окно. Вторая проблема заключается в том, что они не будут захватывать транзакции, которые пересекают часовую отметку, т.е. в 13:59 и 14:01.
Чтобы сделать это проще, было бы удобно разделить час на 5-минутные приращения. Поэтому нам не нужно было проверять 1: 00-1:15pm, 1: 01-1:16pm и т.д. Было бы нормально проверить 1: 00-1:15pm, 1: 05-1: 20pm и т.д. если это проще.
Любые идеи по исправлению sql? У меня есть ощущение, может быть, мне нужны функции окна sql, которые еще не доступны в MySQL. Или напишите хранимую процедуру, которая может смотреть на каждый 15 блоков.