AI & Data Dreamers練功房
寶箱片場規則
QUERY GATES・資料庫關卡・高階・3 題

SQL 高階・連續區間與工作階段

這一頁是題幹試閱;登入/註冊後每題可以在瀏覽器裡執行、對答案,第一次交對 +10 XP。

  1. 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 以上語法相同。

    作答登入後可作答
  2. 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 使用者(文字)、method HTTP 方法(文字)、path 路徑(文字)、status 狀態碼(整數)、ms 回應毫秒(整數)。

    本題在瀏覽器內以 SQLite 執行,只寫一段 SELECT 即可。

    作答登入後可作答
  3. 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 使用者(文字)、method HTTP 方法(文字)、path 路徑(文字)、status 狀態碼(整數)、ms 回應毫秒(整數)。

    本題在瀏覽器內以 SQLite 執行,只寫一段 SELECT 即可。

    作答登入後可作答