Я до сих пор приводил приведенный ниже код, чтобы попытаться собрать соответствующие данные.
Однако с помощью функции "+ 7" она выдает следующую проблему.
Registration date = '2018-01-01'
Он возвращает даты покупки 2018-04-08
, т. 2018-04-08
тех 2018-04-08
, пока день дня на 7 дней больше, чем считается приемлемым. Когда на самом деле я ищу все любые покупки в течение 7 дней с даты регистрации.
Любые советы/помощь будут высоко оценены.
select *
from purchases b
inner join registrations r
on r.customer_id = b.customer_id
and day(b.purchase_date) between d(r.account_opening_date) and day(r.account_opening_date) + 7
and r.account_opening_date >= '2018-01-01 00:00:00.0'
Вы можете просто использовать +
:
select *
from purchases b inner join
registrations r
on r.customer_id = b.customer_id and
b.purchase_date >= r.account_opening_date and
b.purchase_date < r.account_opening_date + interval 7 day
where r.account_opening_date >= '2018-01-01';
Если вы хотите сделать это без компонента времени, используйте функцию date()
:
on r.customer_id = b.customer_id and
b.purchase_date >= r.account_opening_date and
b.purchase_date <= date(r.account_opening_date) + interval 7 day
where r.account_opening_date >= '2018-01-01'
Используете ли вы <
или <=
зависит от правильной интерпретации "в течение 7 дней". Эта версия предполагает, что вы действительно хотите 7-8 дней.
вы можете использовать функцию окна
select *
partition by (order by account_opening_date rows 6 preceding)
from purchases p, registrations r
where p.customer_id = r.customer_id
and r.account_opening_date >= '2018-01-01 00:00:00.0'
Похоже, вам нужно использовать функции DATE_ADD и DATE MySQL.
select *
from purchases b
inner join registrations r
on r.customer_id = b.customer_id
and date(b.purchase_date) between date(r.account_opening_date) and date_add(r.account_opening_date interval 7 day)
and r.account_opening_date >= '2018-01-01 00:00:00.0'
Вместо этого используйте DATE_ADD, DAY() не будет работать хорошо, когда даты для сравнения будут в разные месяцы.
AND b.purchase_date >= r.account_opening_date AND
b.purchase_date <= DATE_ADD(r.account_opening_date INTERVAL 7 Day)