Я пытался, но я не могу понять это. У меня есть таблица транзакций (транзакция_ID, транзакция_Person_ID, Transaction_Date и т. Д.).
Что я хочу, чтобы вернуть все транзакции_person_ID, которые имеют более 3 транзакций в неделю за последний год. Это означает, что я должен проверить от 1-1-10 до 7-1-10, чтобы увидеть, было ли у кого-то больше 3 транзакций за этот 7-дневный период, затем от 2-1-10 до 8-1-10, затем 3-1 От -10 до 9-1-10 и т. Д.
Теперь мне нужно использовать рекурсивный выбор, но то, что я написал, не дает правильные временные рамки.
То, что я написал до сих пор, это
WITH Dates AS (
SELECT
[Date] = CONVERT(DATETIME,'01/01/2010')
UNION ALL SELECT
[Date] = DATEADD(DAY, 1, [Date])
FROM
Dates
WHERE
Date < '12/31/2010'
)
SELECT transaction_person_Id FROM transactions
JOIN DATES
ON transactions.transaction_date = dates.date
where transactions.Transaction_Date between dateadd(DAYOFYEAR,-7,dates.date) and dates.date
group by transaction_person_Id
having count(transaction_person_ID) >= 4
OPTION (MAXRECURSION 2000)
Большое спасибо
PS:
Проще говоря, что мне нужно сделать, это
select transaction_person_ID from transactions
where Transaction_Date between '2010-01-01' and '2010-01-07'
group by transaction_person_Id
having count(transaction_person_ID) >= 4
тогда
select transaction_person_ID from transactions
where Transaction_Date between '2010-01-02' and '2010-01-08'
group by transaction_person_Id
having count(transaction_person_ID) >= 4
.
,
,
,
,
пока не пойдет
select transaction_person_ID from transactions
where Transaction_Date between '2010-12-25' and '2010-12-31'
group by transaction_person_Id
having count(transaction_person_ID) >= 4
мне нужны результаты этих 365 запросов