我有兩個表。一張桌子有分配給每個顧客的優惠券,另一張桌子有每個顧客的兌換信息。我基本上只需要爲每個活動兌換優惠券,如果UPC與兩個活動重疊,它將被計入兩次(但不會在一次活動中計算兩次)。這裏的redemtion表SQL連接允許每個表只有一個匹配
| customer_id | UPC | redeem_date_id |
|-------------|------|----------------|
| 1234 | 3456 | 42 |
| 1234 | 3456 | 43 |
| 1234 | 3456 | 44 |
| 1234 | 3456 | 49 |
的想法,並與優惠券表分配的貌似
| customer_id | campaign_id | UPC | print_date_id | expire_date_id |
|-------------|-------------|------|---------------|----------------|
| 1234 | 1 | 3456 | 35 | 45 |
| 1234 | 1 | 3456 | 40 | 50 |
| 1234 | 2 | 3456 | 41 | 51 |
在這個例子中,客戶比分配券出現更多的贖回(因爲他們可能已經裁剪優惠券某處等)。但他們也可以有更多的分配優惠券而不是贖回。
顯然,如果我做了
where a.customer_id = b.customer_id and a.upc=b.upc and
redeem_date_id between print_date_id and expire_date_id
我會收穫更多的記錄回比我更需要。我不希望每次活動都有相同的贖回次數超過一次,而且我也不希望獲得比原來更多的優惠券。例外情況是,對於不在一個廣告系列中的不同廣告系列,可以計算相同的兌現次數。 (所以如果兌換表只有第一個觀察結果,我希望輸出表有兩個兌換 - 一個用於第一個廣告系列的優惠券 - 我不在乎哪一個 - 第二個廣告系列用於一個廣告系列)。
這實際上是一個分配問題 - 在我希望在兌換表中查找匹配的廣告系列中,加入它 - 然後查找下一個觀察的匹配項(不重複使用第一個匹配的兌換項)。因此,許多可能的方式輸出表可以看一個是:
| customer_id |campaign_id|UPC |print_date_id|expire_date_id|redeem_date_id|
|-------------|-----------|----|-------------|--------------|--------------|
| 1234 | 1 |3456| 35 | 45 | 42 |
| 1234 | 1 |3456| 40 | 50 | 43 |
| 1234 | 2 |3456| 41 | 51 | 42 |
任何幫助是通過使用子查詢不勝感激
同一位客戶是否可以在同一天爲同一個「UPC」和同一個「活動」兌換多於一張的優惠券(即相同的「redeem_date_id」)? – 2013-05-14 14:00:14
是的,所以如果您剪下兩張相同的優惠券並在一次交易中兌換,它基本上看起來就像兌換表中的兩個相同的觀察。 (如果你正在尋找一個唯一的標識符,我可以對這些觀察數據進行編號)。 – 2013-05-14 14:49:17
我在考慮使用GROUP BY來平整表格,但需要保留正確的'print_date_id' - 'expire_date_id'對。 – 2013-05-14 15:50:41