SQL138 連續兩次作答試卷的最大時間窗

SQL138 連續兩次作答試卷的最大時間窗

問題分析

  1. 找出2021年至少有兩天作答的用戶
  2. 計算每個用戶連續兩次作答的最大時間窗
  3. 基于歷史數據預測在這個時間窗內平均會做多少套試卷

版本1?

with-- 功能?:篩選2021年至少有兩天作答的用戶及其作答記錄-- 子查詢找出2021年至少有兩天作答的用戶ID(count(distinct date(start_time)) >= 2)-- 主查詢獲取這些用戶在2021年的所有作答記錄-- 結果包含三列:uid(用戶ID)、exam_id(試卷ID)、start_time(作答日期)user_with_multiple_days as (selectuid,exam_id,date(start_time) as start_timefromexam_recordwhereuid in (selectuidfromexam_recordwhereyear(start_time) = 2021group byuidhavingcount(distinct date(start_time)) >= 2)and year(start_time) = 2021),-- 功能?:計算每個用戶的日均作答量-- 通過自連接找出每個用戶的所有作答日期組合(u1.start_time < u2.start_time)-- 計算每個用戶的總作答次數(子查詢中的count(start_time))-- 計算最大日期跨度(max(datediff(u2.start_time, u1.start_time) + 1))-- 用總作答次數除以最大日期跨度得到日均作答量(max_avg)max_avg_temp as (selectu1.uid,(selectcount(start_time)fromuser_with_multiple_dayswhereuid = u1.uid) / max(datediff(u2.start_time, u1.start_time) + 1) as max_avgfromuser_with_multiple_days u1join user_with_multiple_days u2 on u1.uid = u2.uidand u1.start_time < u2.start_timegroup byu1.uid),-- 功能?:計算每個用戶連續兩次作答的最大時間窗-- 使用窗口函數lag()獲取每個用戶的上一次作答日期-- datediff(start_time, lag(start_time)) + 1計算相鄰兩次作答的時間窗-- +1是因為間隔2天實際上是3天的窗口(如1號和3號是3-1=2天,但實際窗口是3天)-- max(days_window)找出每個用戶的最大時間窗max_windows_temp as (selectuid,max(days_window) as days_windowfrom(selectuid,start_time,datediff(start_time,lag(start_time) over (partition byuidorder bystart_time asc)) + 1 as days_windowfromuser_with_multiple_days) as t1group byuid)
selectuid,days_window,round(days_window * max_avg, 2) as avg_exam_cnt
frommax_avg_tempjoin max_windows_temp using (uid)
order bydays_window desc,avg_exam_cnt desc

1. 第一個CTE:user_with_multiple_days

user_with_multiple_days as (selectuid,exam_id,date(start_time) as start_timefromexam_recordwhereuid in (selectuidfromexam_recordwhereyear(start_time) = 2021group byuidhavingcount(distinct date(start_time)) >= 2)and year(start_time) = 2021
)

?功能?:篩選2021年至少有兩天作答的用戶及其作答記錄

?詳細說明?:

  • 子查詢找出2021年至少有兩天作答的用戶ID(count(distinct date(start_time)) >= 2
  • 主查詢獲取這些用戶在2021年的所有作答記錄
  • 結果包含三列:uid(用戶ID)、exam_id(試卷ID)、start_time(作答日期)

2. 第二個CTE:max_avg_temp

max_avg_temp as (selectu1.uid,(selectcount(start_time)fromuser_with_multiple_dayswhereuid = u1.uid) / max(datediff(u2.start_time, u1.start_time) + 1) as max_avgfromuser_with_multiple_days u1join user_with_multiple_days u2 on u1.uid = u2.uidand u1.start_time < u2.start_timegroup byu1.uid
)

?功能?:計算每個用戶的日均作答量

?詳細說明?:

  • 通過自連接找出每個用戶的所有作答日期組合(u1.start_time < u2.start_time
  • 計算每個用戶的總作答次數(子查詢中的count(start_time)
  • 計算最大日期跨度(max(datediff(u2.start_time, u1.start_time) + 1)
  • 用總作答次數除以最大日期跨度得到日均作答量(max_avg

3. 第三個CTE:max_windows_temp

max_windows_temp as (selectuid,max(days_window) as days_windowfrom(selectuid,start_time,datediff(start_time,lag(start_time) over (partition byuidorder bystart_time asc)) + 1 as days_windowfromuser_with_multiple_days) as t1group byuid
)

?功能?:計算每個用戶連續兩次作答的最大時間窗

?詳細說明?:

  • 使用窗口函數lag()獲取每個用戶的上一次作答日期
  • datediff(start_time, lag(start_time)) + 1計算相鄰兩次作答的時間窗
    • +1是因為間隔2天實際上是3天的窗口(如1號和3號是3-1=2天,但實際窗口是3天)
  • max(days_window)找出每個用戶的最大時間窗

最終查詢

selectuid,days_window,round(days_window * max_avg, 2) as avg_exam_cnt
frommax_avg_tempjoin max_windows_temp using (uid)
order bydays_window desc,avg_exam_cnt desc

?邏輯?:

  • 將最大時間窗(days_window)乘以日均作答量(max_avg)
  • 預測在該時間窗內平均會做多少套試卷(avg_exam_cnt)
  • 按最大時間窗和預測作答量降序排序

簡化1

待補充。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88699.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88699.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88699.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TensorFlow2 study notes[2]

文章目錄tf.autodiff.ForwardAccumulatorreferencestf.autodiff.ForwardAccumulator the function can be used to achieve the Computation of Jacobian-vector products with forward-mode autodiff. primals is variables need to watch.tangents is direction vector. …

穩定幣將成為新時代的重要金融工具

在數字經濟加速滲透的今天,加密貨幣作為一種新型價值載體,正深刻改變著全球金融的運作邏輯。其中,穩定幣與非穩定幣構成了加密貨幣生態的兩大支柱,二者在設計邏輯、應用場景和市場表現上呈現出顯著差異。 穩定幣錨定法定貨幣 穩定幣是一類以法定貨幣、大宗商品或其他資產…

Constants

本節是《Solidity by Example》的中文翻譯與深入講解&#xff0c;專為零基礎或剛接觸區塊鏈開發的小白朋友打造。我們將通過“示例 解說 提示”的方式&#xff0c;帶你逐步理解每一段 Solidity 代碼的實際用途與背后的邏輯。 Solidity 是以太坊等智能合約平臺使用的主要編程語…

五鏡頭傾斜攝影相機的技術優勢與應用原理

傾斜攝影技術作為三維實景建模的核心手段&#xff0c;其硬件設計直接影響數據采集效率與模型質量。在眾多鏡頭配置方案中&#xff0c;五鏡頭結構&#xff08;下視前、后、左、右四個傾斜視角&#xff09;已成為行業主流選擇。這一設計并非偶然&#xff0c;而是基于嚴苛的技術需…

ThinkSound V2版 - 一鍵給無聲視頻配音,為AI視頻生成匹配音效 支持50系顯卡 一鍵整合包下載

ThinkSound 是阿里通義實驗室開源的首個音頻生成模型&#xff0c;它能夠讓AI像專業“音效師”一樣&#xff0c;根據視頻內容生成高度逼真、與視覺內容完美契合的音頻。 ThinkSound 可直接應用于影視后期制作&#xff0c;為AI生成的視頻自動匹配精準的環境噪音與爆炸聲效&#x…

如何從0開始構建自己的第一個AI應用?(Prompt工程、Agent自定義、Tuning)

一、前言 從0開始基于自定義Agent構建AI應用&#xff0c;涉及從創建智能Agent到使用、測試及優化提示詞等一系列步驟。前置&#xff1a;什么是LLM、Prompt、Mcp和Agent&#xff1f; 二、步驟一&#xff1a;規劃和設計AI應用 在創建AI應用之前&#xff0c;你需要明確應用的目標…

Java ThreadLocal詳解:從原理到實踐

Java ThreadLocal詳解&#xff1a;從原理到實踐&#xff08;圖解極簡示例&#xff09; 一、什么是ThreadLocal&#xff1f;——線程的"專屬儲物柜" ThreadLocal 是 Java 提供的線程本地存儲機制&#xff0c;通俗來說&#xff0c;它能為每個線程創建一個獨立的變量副本…

如何在 Visual Studio Code 中使用 Cursor AI

在當今快節奏的開發環境中&#xff0c;像 Cursor AI 這樣的 AI 工具正在徹底改變開發人員編寫和管理代碼的方式。Cursor AI 通過提供智能代碼建議、自然語言編輯和多文件項目更新功能&#xff0c;增強了“ Visual Studio Code (VS Code )”的功能&#xff0c;所有這些功能均由 …

阿里面試:服務與發現 ,該選擇 CP 還是 AP?為什么?

說在前面 最近有小伙伴拿到了一線互聯網企業如微博、阿里、汽車之家、極兔、有贊、希音、百度、網易、滴滴的面試資格&#xff0c;遇到一幾個很重要的面試題&#xff1a; 服務注冊發現&#xff0c;該選 AP 還是 CP&#xff1f; 為什么&#xff1f; 最近有小伙伴在面 阿里。 小伙…

模擬實現Vue2-Vue3響應式更新

Vue2作為 MVVM框架/* Vue2 通過 Object.defineProperty 監聽、挾持數據&#xff0c;實現響應式 并通過 Dep&#xff08;依賴收集器&#xff09; 和 Watcher 實現依賴收集&#xff0c;通知視圖更新 *//* 但是 Vue2用Object.defineProperty 無法監聽新增屬性、無法監聽數組索引變…

一文理解鋰電池充電、過放修復與電量測量:從原理到實戰

一、為什么要看這篇文章&#xff1f; 手機電量突然從20%跳到0%&#xff1f;電動車冬天續航腰斬&#xff1f;18650過放后還能救嗎&#xff1f; 本文用一張思維導圖一張表格一段口訣&#xff0c;一次性講透鋰電池的充電四階段、過放修復全方案、電量測量底層原理&#xff0c;并給…

【爬蟲】01 - 爬蟲原理及其入門

爬蟲01 - 爬蟲原理及其入門 文章目錄爬蟲01 - 爬蟲原理及其入門一&#xff1a;爬蟲原理1&#xff1a;爬蟲的優勢?2&#xff1a;爬蟲的核心庫3&#xff1a;經典舉例4&#xff1a;合規問題一&#xff1a;爬蟲原理 學習爬蟲之前前置知識需要了解這些&#xff1a; 我的HTTP介紹, 了…

React對于流式數據和非流式數據的處理和優化

React 在處理流式數據和非流式數據時&#xff0c;可以借助其組件模型、狀態管理以及 React 18 引入的并發特性來實現高效的數據處理與渲染優化。 文章目錄一、流式數據&#xff08;Streaming Data&#xff09;1. 定義2. 常見來源3. 處理方式使用 useState / useReducer 管理狀態…

3、Vue 中使用 Cesium 實現可拖拽點標記及坐標實時顯示功能

在 Cesium 地圖開發中&#xff0c;實現點標記的拖拽交互并實時顯示坐標信息是一個常見的需求。本文將詳細介紹如何在 Vue 框架中使用 Cesium 的 Primitive 方式創建點標記&#xff0c;并實現拖拽功能及坐標提示框跟隨效果。先看效果圖功能實現概述我們將實現的功能包括&#xf…

Anthropic:從OpenAI分支到AI領域的領軍者

自2021年由前OpenAI高管Dario和Daniela Amodei創立以來&#xff0c;Anthropic已迅速崛起為人工智能&#xff08;AI&#xff09;領域的重要力量。 公司專注于開發安全、可控且具備深度推理能力的AI系統&#xff0c;其Claude系列模型在生成式AI領域取得了顯著成就。 此外&#xf…

前端開發中的輸出問題

前端開發中的輸出問題&#xff1a;console.log輸出[object Object]在前端開發中&#xff0c;一個常見問題是使用console.log輸出對象時顯示為[object Object]&#xff0c;而不是對象的詳細內容。這通常發生在開發者試圖直接打印對象時&#xff0c;瀏覽器默認只顯示對象的字符串…

DSSA(Domain-Specific Software Architecture)特定領域架構

DSSA&#xff08;Domain-Specific Software Architecture&#xff09; 定義&#xff1a;針對特定應用領域設計的可復用軟件架構&#xff0c;為領域內產品族提供統一基礎。 目標&#xff1a; ? 最大化復用&#xff08;需求/設計/代碼&#xff09;? 保證系統一致性? 降低開發成…

單調棧單調隊列【算法進階】

這周學完之后最大的收獲就是單調棧和單調隊列了&#xff01;&#xff01;&#xff01;感覺好厲害能把時間復雜度瞬間壓縮為O(N)&#xff0c;不行我必須再紀念一下這么美妙的算法&#xff01;&#xff01;&#xff01; 單調棧問題&#xff1a; 如果題目要求一個元素左邊或右邊…

C++編程基礎

編程題一問題分析 題目要求使用 n 根小木棒&#xff0c;按照特定的方式排列&#xff0c;形成一個數字。具體規則如下&#xff1a; 每個數字由小木棒組成&#xff0c;例如&#xff1a; 1 需要 2 根小木棒。0 需要 6 根小木棒。其他數字&#xff08;如 2, 3, 4, 5, 6, 7, 8, 9&am…

張量拼接操作

一.前言本章節來介紹一下張量拼接的操作&#xff0c;掌握torch.cat torch.stack使?&#xff0c;張量的拼接操作在神經?絡搭建過程中是?常常?的?法&#xff0c;例如: 在后?將要學習到的殘差?絡、注意?機 制中都使?到了張量拼接。二.torch.cat 函數的使用torch.cat 函數…