Redshift

在 Redshift 中為每位客戶找到前 2 次購買的最快方法是什麼?

  • June 28, 2018

我正在尋找每個客戶的前 2 次購買。

我有一個看起來像這樣的表:

orders

帶列:

order_id
customer_email
grand_total
purchase_date

該表中有數百萬行,我正在嘗試尋找一種有效的方法來獲取每個客戶的前兩條最早記錄,以便獲得如下所示的結果集:

order_id
customer_email
purchase_date1
purchase_date2

我不知道如何有效地做到這一點。

假設有一個單獨的customers表和一個複合索引orders(customer_email, purchase_date),這樣的事情會做到:

select
 customer_email,
 array(
   select order_id
   from orders
   where customer_email = c.customer_email
   order by purchase_date
   limit 2
 ) as order_ids
from customers c;

使用視窗函式可能是一種選擇:

select * from (
 select customer_email, purchase_date, order_id, 
        row_number() over (partition by customer_email order by purchase_date) rn
 from orders
) t where rn < 3

引用自:https://dba.stackexchange.com/questions/210807