トランザクション、人、トランザクションの日付、アイテムなどのデータベースがあります。人がアイテムを購入するたびに、トランザクションは次のようにテーブルに保存されます。
personNumber, TransactionNumber, TransactionDate, ItemNumber
私がやりたいのは、2012年1月1日(transactionDate)から2012年3月1日までに同じItemNumberを14日以内(構成可能)以内に複数回購入した人(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
問題は、14日以内ではないため、TransactionNumber107が不要なことです。その14日の制限をどこに置くべきかわかりません。私はdatediffを行うことができましたが、どこで、何を超えていますか?