我的表格中有以下字段,用于跟踪客户购买的商品:
customer_id, item_id, week_id
我希望过滤此表,以便仅保留每周至少连续5周购买至少1件商品的客户。
我目前的想法是在customer_id和week_id字段上使用DISTINCT,然后在customer_id上执行GROUP BY。但是,我不知道我应该使用哪个聚合函数,或者我是否应该使用UDF函数来执行它(因此我的聚合函数将把week_id分组到一个集合中,然后在此集合上应用我的UDF)。 / p>
另一种方法是创建一个week_id_1,week_id_2,week_id_3,week_id_4列,我将根据week_id列填充增加的值,然后在表上自己执行5次LEFT JOIN(在week_id上,然后在week_id_1,然后在week_id_2,等等。这似乎相当昂贵,我想知道是否没有更好的方法。
我非常感谢任何帮助,因为我对SQL不是很熟悉。
答案 0 :(得分:1)
如果您想连续五周,请使用join
,假设week_id
每周增加1。这是一种方式:
select distinct customer_id
from t t1 join
t t2
on t2.customer_id = t1.customer_id and
t2.week_id = t1.week_id + 1 join
t t3
on t3.customer_id = t1.customer_id and
t3.week_id = t1.week_id + 2 join
t t4
on t4.customer_id = t1.customer_id and
t4.week_id = t1.week_id + 3 join
t t5
on t5.customer_id = t1.customer_id and
t5.week_id = t1.week_id + 4;