SQL 高階・連續區間與工作階段
這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。
- 01
最長連續上漲
困難找出每支股票最長的連續上漲區間(連續多個交易日 close 都高於前一交易日),輸出 stock_id、起日、迄日、天數;若同股票有多個相同長度的區間,取起日最早的那個。依 stock_id 排序。
這是面試常考的 gaps & islands 問題:先用 LAG 標記「是否上漲」,再用「全體列號 − 同標記列號」把連續段歸成同一組。
資料表
TaiwanStockPrice(與課程第 6 章的股價表同構):stock_id股票代號(文字)、date交易日(文字,'YYYY-MM-DD')、open、max、min、close(實數)、Trading_Volume成交量(整數);複合主鍵(stock_id, date)。資料含 2330 與 2317 兩檔、2026-01-05 至 2026-01-20 的交易日。平台以 sqlite 執行,支援 window function 與 CTE;MySQL 8.0 以上語法相同。
作答登入後可作答 - 02
使用者工作階段數
困難視窗函數(LAG+累計)同一位使用者的兩次請求相隔超過 10 秒,就算新的工作階段(session);每位使用者的第一次請求一定是新 session。
請輸出每位使用者一列:user_id、sessions(session 數)、requests(請求數),依 user_id 由小到大。
提示:SQLite 的 strftime('%s', ts) 會把時間轉成秒數(文字),相減時會自動轉成數字。
資料表
access_log(API 存取日誌):id編號(整數,主鍵)、ts時間(文字,格式 'YYYY-MM-DD HH:MM:SS')、user_id使用者(文字)、methodHTTP 方法(文字)、path路徑(文字)、status狀態碼(整數)、ms回應毫秒(整數)。本題在瀏覽器內以 SQLite 執行,只寫一段 SELECT 即可。
作答登入後可作答 - 03
錯誤後多久恢復
困難子查詢/CTE客服想知道:每位「遇過錯誤」(status ≥ 400)的使用者,第一次遇到錯誤的時間,以及在那之後第一次成功(status 介於 200 到 299)的時間。之後都沒成功過的,恢復時間為 NULL。
請輸出 user_id、first_error、recovered_at 三欄,依 user_id 由小到大。沒遇過錯誤的使用者不列出。
資料表
access_log(API 存取日誌):id編號(整數,主鍵)、ts時間(文字,格式 'YYYY-MM-DD HH:MM:SS')、user_id使用者(文字)、methodHTTP 方法(文字)、path路徑(文字)、status狀態碼(整數)、ms回應毫秒(整數)。本題在瀏覽器內以 SQLite 執行,只寫一段 SELECT 即可。
作答登入後可作答

送件鴿飛出去了