你能連續讀書多少天?

【面試題】

有一張“閱讀記錄表”,包含2個字段:用戶id、閱讀日期。

查詢3月份以來,連續閱讀5天及以上的用戶名單。

【解題步驟】

1. 連續問題的萬能模板

我在《拼多多面試題:如何找出連續出現N次的內容?裏講過遇到“連續問題”如何解決,並送出了一個萬能模板,模板使用的是窗口函數解決連續問題。

2. 窗口函數

窗口函數lead使用方法:

默認值是指:當向上N行或者向下N行值時,如果已經超出了錶行和列的範圍時,會將這個默認值作爲函數的返回值,若沒有指定默認值,則返回Null。

窗口函數lead可以獲取每個字段的後面的第n個值,並生成新的一列。

查詢結果:

3. 子查詢

基於窗口函數lead獲取的結果,要篩選出連續閱讀5天及以上的用戶名單。

只需要滿足以下條件:

1)“後面第1個日期”與“閱讀日期”差1天;

2)“後面第2個日期”與“閱讀日期”差2天;

3)“後面第3個日期”與“閱讀日期”差3天;

4)“後面第4個日期”與“閱讀日期”差4天。

一個用戶同時滿足上面4個條件,說明:該用戶至少一次連續閱讀了5天。

以上條件的過濾可以使用date_sub函數:獲取某個日期前n天的日期。

最終結果爲:

查詢結果:

【本題考點】

1.考查對窗口函數的瞭解;

2.考查對子查詢的瞭解;

3.考查對連續問題的瞭解,可以套用萬能模板。

推薦:從零學會SQL?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章