Я новичок в языке sql и недавно снежинка.У меня есть таблица, которая содержит все даты регистрации для всех пользователей в бизнесе
user_id | checkin_date
001 03-06-2018
001 07-07-2018
001 08-01-2018
002 03-19-2018
002 03-27-2018
002 07-11-2018
Теперь я хочу сделать запрос так, чтобы я мог оглянуться назад на query_date, чтобы увидеть, сколько раз каждый пользователь проверял междуquery_date - 7 и query_date, qyery_date - 90 и дата запроса ... следующий запрос снежинки выполняет работу правильно для query_date = '2018-08-01'.
with user_checkin_history_sum as (
select
user_id,
sum(iff(datediff(DAY, uc.checkin_date, '2018-08-01') <= 7, 1, 0)) as visits_past_7_days,
sum(iff(datediff(DAY, uc.checkin_date, '2018-08-01') <= 90, 1, 0)) as visits_past_90_days,
from user_checkin as uc
where uc.checkin_date < '2018-08-01'
group by user_id
order by user_id
)
Это дает мне результат
user_id | visits_past_7_days | visits_past_90_days
001 0 2
002 0 1
Мой вопрос: если у меня больше одного дня в качестве query_date, то есть у меня есть список checkin_date, для каждой checkin_date в списке я делаю запрос, как указано выше, и добавляю их все вместе.По сути, это циклическое + табличное добавление, но я не могу найти ответ, как это сделать на языке SQL.По сути, я хочу сделать следующее:
with user_checkin_history_sum as (
select
user_id,
sum(iff(datediff(DAY, uc.checkin_date, query_date) <= 7, 1, 0)) as visits_past_7_days,
sum(iff(datediff(DAY, uc.checkin_date, query_date) <= 90, 1, 0)) as visits_past_90_days,
from user_checkin as uc
where uc.checkin_date < query_date and
LOOP OVER
query_date in ('2018-08-01', '2018-06-01')
group by user_id
order by user_id
)
И, надеюсь, это даст такой результат
user_id | query_date | visits_past_7_days | visits_past_90_days
001 '08-01-2018' 0 2
002 '08-01-2018' 0 1
001 '06-01-2018' 0 1
002 '06-01-2018' 0 2