我有一个交易、人员、交易日期、物品等的数据库。每次有人购买物品时,交易都会存储在表中,如下所示:
personNumber, TransactionNumber, TransactionDate, ItemNumber
我想要做的是找到从 2012 年 1 月 1 日(transactionDate)到 2012 年 3 月 1 日在 14 天(可配置)或更短的时间内多次购买相同 ItemNumber 的人(personNumber)。然后,我需要在报告中列出所有这些交易。
样本数据:
personNumber, TransactionNumber, TransactionDate, ItemNumber
1 | 100| 2001-01-31| 200
2 | 101| 2001-02-01| 206
2 | 102| 2001-02-11| 300
1 | 103| 2001-02-09| 200
3 | 104| 2001-01-01| 001
1 | 105| 2001-02-10| 200
3 | 106| 2001-01-03| 001
1 | 107| 2001-02-28| 200
结果:
personNumber, TransactionNumber, TransactionDate, ItemNumber
1 | 100| 2001-01-31| 200
1 | 103| 2001-02-09| 200
1 | 105| 2001-02-10| 200
3 | 104| 2001-01-01| 001
3 | 106| 2001-01-03| 001
你会怎么做呢?
我试过这样做:
select *
from (
select personNumber, transactionNumber, transactionDate, itemNumber,
count(*) over (
partition by personNumber, itemNumber) as boughtSame)
from transactions
where transactionDate between '2001-01-01' and '2001-03-01')t
where boughtSame > 1
它让我明白了:
personNumber, TransactionNumber, TransactionDate, ItemNumber
1 | 100| 2001-01-31| 200
1 | 103| 2001-02-09| 200
1 | 105| 2001-02-10| 200
1 | 107| 2001-02-28| 200
3 | 104| 2001-01-01| 001
3 | 106| 2001-01-03| 001
问题是我不想要 TransactionNumber 107,因为那不在 14 天内。我不确定在哪里设置 14 天的限制。我可以做一个日期差异,但是在哪里,在什么范围内?