0
おかしなタイトルの謝罪 - 何か良いものを考え出すことができませんでした。SQLの注文 - 一番上の行の中の一番上の行を選択してください
私は以下の表を持っている:
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を制限しません。
ここランクは単にあなたの販売数をどうするSale_TScolumnの何に基づいて行数になるだろう(から何とか何とか何とかを(何とか何とか何とかを選択))。 – Matt