具体的な例として、T
列を持ち、個々の顧客が購入した日を示すcustomer
テーブルがあるとします。date
customer | date
----------------------
A | 01/01/2013
A | 02/01/2013
A | 07/01/2013
A | 11/01/2013
B | 03/01/2013
B | 08/01/2013
(customer, date)
各ペアpairについて、そのようなペアの(c, d)
数を示す別の列を追加したいと思いますおよび. 以下は、この追加の列を含む表です。(c', d')
T
c = c'
0 <= days(d) - days(d') <= 7
customer | date | new_column
----------------------------------
A | 01/01/2013 | 1
A | 02/01/2013 | 2
A | 07/01/2013 | 3
A | 11/01/2013 | 2
B | 03/01/2013 | 1
B | 10/01/2013 | 1
この問題を解決するために使用した手順の大まかなアイデアとして:
T'
可能なすべてのペアを含むテーブルを作成します(c,d)
。- 左結合
T
にT'
; - 新しい列を作成します:
count(date) over (partition by customer order by date asc rows between 6 preceding and 0 following)
; - この新しいテーブルから行を省略します。
T.date is null
ただし、これはスケーラブルではないと思います。
どんな助けにも乾杯。