过滤按特定列上的给定步骤增加的行

时间:2016-09-30 09:29:41

标签: mysql sql

我的表格中有以下字段,用于跟踪客户购买的商品:

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不是很熟悉。

1 个答案:

答案 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;