編寫一條 SQL 查詢,找出在 Logs 表中至少連續出現三次的數字。
+----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+
根據上表,數字 1 是唯一連續出現至少三次的數值(Id 1-3)。
使用 MySQL 變量來追蹤連續計數:
SELECT DISTINCT Num
FROM (
SELECT Num,
CASE
WHEN @prevNum = Num THEN @count := @count + 1
WHEN (@prevNum := Num) IS NOT NULL THEN @count := 1
END AS n
FROM Logs,
(SELECT @prevNum := NULL, @count := 0) r
ORDER BY Id
) a
WHERE n >= 3;
查詢通過用戶定義變量 @prevNum 記錄上一行的數值,@count 累計連續出現次數。當當前 Num 與前一行相同時計數加 1,否則重置為 1。最後在外層查詢中篩選計數 ≥ 3 的記錄,並用 DISTINCT 去重。