【面試題】
某遊戲的某促銷活動,會向玩家推薦一個道具,同時會得到該道具的折扣券。折扣券無有效期,但購買道具一次後失效。推薦一個新的道具,也會導緻舊的折扣券失效。
假設道具推薦、查看、購買行為記錄在了下面的“遊戲道具記錄表”中,包含4個字段:時間、玩家id、行為、道具id。
表中的“行為”字段的值包括:向玩家推薦道具、玩家查看道具、玩家成功付費購買道具
數據說明:
1)一個道具的折扣券失效後,玩家仍然可以以原價購買推薦的道具
2)同一個道具不會被重複推薦
3)如果玩家使用折扣券購買道具,則認為這次推薦道具->查看道具->購買道具屬于一個成功推薦過程,推薦道具->購買道具(即中途缺少該道具的查看記錄)不屬于成功推薦過程。
4)玩家可以推薦前查看道具,但不會獲得折扣券
【問題】查詢所有成功推薦過程中,該道具的第一條查看記錄。
【解題步驟】
1. 解題思路
這個業務問題一看很複雜,遇到複雜的問題,要想到用邏輯樹分析方法,将複雜問題拆解為可以解決的子問題:
1)找出所有成功推薦的記錄(成功推薦是玩家使用折扣券進行購買)
2)找出成功推薦時間與對應購買時間之間的查看記錄
3)篩選出每一次成功推薦的第一條查看記錄
2. 所有成功推薦的記錄
一次成功推薦是“推薦道具->查看道具->購買道具”這樣的過程。
1)獲取所有推薦道具的數據
記為表t1。
2)獲取所有購買道具的數據
記為表t2。
3)獲取同一個玩家同一個道具的“推薦道具->購買道具”
以“所有推薦道具的數據”為左表,使用左聯結,從“所有購買道具的數據”中獲取同一個玩家同一個道具的購買記錄(購買時間在推薦時間之後)。
由于一次推薦之後,可能存在多次購買記錄,此處使用窗口函數每次推薦之後對應的購買時間順序。
查詢結果:
以上結果記為表t3。
4)對“玩家購買時間順序”進行篩選
按照成功推薦的定義,“玩家購買時間順序”為1時,才可能成為成功推薦。
因為,購買道具一次後道具對應的折扣券會失效。
以上結果記為表tt1。
5)得到成功推薦的記錄
上一步的結果還不是成功推薦。
因為,如果“推薦道具時間”與“玩家購買時間”之間有另外的一次推薦,這次的推薦的折扣券就失效了。
查詢出“推薦道具時間”與“玩家購買時間”之間沒有其他推薦的記錄。
以上結果記為數據a1。
3. 獲取成功推薦中的查看記錄
1)獲取所有查看道具的數據
記為表a2。
2)獲取成功推薦記錄中“推薦道具時間”與“玩家購買時間”之間的所有查看記錄
同時,用窗口函數row_number()獲取了“查看時間順序”。
以上結果記為a3。
4. 獲取成功推薦中的第一條查看記錄
最後,篩選出第一次查看的記錄,并恢複成初始的數據結構。
将子查詢代入:
【本題考點】
1)考查對窗口函數的了解;
2)考查對多表聯結的了解。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!