【发布时间】:2016-12-08 17:05:53
【问题描述】:
为这个糟糕的标题道歉 - 无法想出更好的东西。
我有下表:
Customer_ID Item_ID sale_ID sale_TS
103293 I-0394039 S-430943 20161101
我需要找到销售额最高的前 100 位客户,以及他们在给定时间范围内购买的前 100 件商品。这是我目前所拥有的:
select vs.Customer_ID, vs.Item_ID, count(*) count2
from sales.sales_import si1
join
(
select Customer_ID, count(*) s_count2 from sales.sales_import where
sale_TS between '2016-01-01' and '2016-01-31' group by Customer_ID order by sale_TS desc limit 100
)
si2
on si1.Customer_ID = si2.Customer_ID
where
si1.sale_TS between '2016-01-01' and '2016-01-31'
group by vs.Customer_ID, vs.Item_ID
order by vs.Customer_ID, count2 desc limit 100
问题:
- 我基本上是在这里将表连接到自身,有没有更好的方法?
- 如何限制查询仅返回每个 Customer_ID 的前 100 项?这里的外部限制将限制所有行,而不是每个 customerID 的第一个 X
【问题讨论】: