![](/img/trans.png)
[英]Query to get total orders placed by some specific customer in last year retrieves repeated dates when no order exists
[英]Using window function to get how many orders a customer has made so far and when was their last order
所以,這可能看起來很簡單的問題,但因為這個問題,我在招聘過程中失敗了。 假設我們有以下數據集:
訂單號 | 客戶ID | 訂購日期 | 合計訂單 |
---|---|---|---|
1 | 99 | 2020-10-01 | 100 美元 |
2 | 10 | 2020-10-02 | 150 美元 |
3 | 12 | 2020-10-04 | 390 美元 |
4 | 99 | 2020-11-07 | 99 美元 |
5 | 10 | 2020-11-08 | 10 美元 |
我被要求獲取訂單 ID、客戶 ID、訂單日期、他們在下訂單時下了多少訂單以及他們的最后一個訂單是什么時候(如果存在)。 所以,在這種情況下,我們最終會得到:
訂單號 | 客戶ID | 訂購日期 | 已下單 | 最后的訂單 |
---|---|---|---|---|
1 | 99 | 2020-10-01 | 1 | null |
2 | 10 | 2020-10-02 | 1 | null |
3 | 12 | 2020-10-04 | 1 | null |
4 | 99 | 2020-11-07 | 2 | 2020-10-01 |
5 | 10 | 2020-11-08 | 2 | 2020-10-02 |
我知道 window function 會在這里幫助我,但我仍然不知道如何正確使用它。 有人可以幫我嗎?
我想你只想要row_number()
和lag()
:
select t.*,
row_number() over (partition by clientId order by orderDate) as ordersmade,
lag(orderDate) over (partition by clientId order by orderDate) as prev_orderDate
from t;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.