【发布时间】:2011-05-22 17:27:37
【问题描述】:
我已经尝试过,但我无法解决这个问题。我有一个表交易(transaction_ID、transaction_Person_ID、Transaction_Date 等)。 我想要的是返回去年每周有超过 3 笔交易的所有 transaction_person_ID。这意味着我必须检查 1-1-10 到 7-1-10 以查看是否有人在 7 天内进行了 3 次以上的交易,然后检查 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个查询的结果
【问题讨论】:
-
您想要 360 个不同的结果集?
标签: sql sql-server tsql select recursion