我有交易的人,交易日期,物品等,每一次一个人买的物品的数据库,该交易被存储在表所示:
personNumber, TransactionNumber, TransactionDate, ItemNumber
我想要做的是找到谁,从2012年(transactionDate)1月1日起至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天内该限制。 我可以做一个DATEDIFF,但在那里,和在什么?