以下是我的MySQL查詢,查找每個帳戶的連續日期之間的差異,然後使用結果準備頻率計數表。這個查詢當然很慢,但在此之前我做的是正確的事情?如果可以的話請幫忙。嵌入的也是一個小數據樣本。 欣賞你的時間。 OZooHAMySQL查詢很慢 - 在組級別的連續日期的差異
ID DATE
403 2008-06-01
403 2012-06-01
403 2011-06-01
403 2010-06-01
403 2009-06-01
15028 2011-07-01
15028 2010-07-01
15028 2009-07-01
15028 2008-07-01
SELECT
month_diff,
count(*)
FROM
(SELECT t1.id,
t1.date,
MIN(t2.date) AS lag_date,
TIMESTAMPDIFF(MONTH, t1.date, MIN(t2.date)) AS month_diff
FROM tbl_name T1
INNER JOIN tbl_name T2
ON t1.id = t2.id
AND t2.date > t1.date
GROUP BY t1.id, t1.date
ORDER BY t1.id, t1.date
)
GROUP BY month_diff
ORDER BY month_diff
爲什麼你會困擾初始化您的@爲空?您可以取消交叉連接。 – Arth 2014-09-25 19:39:58
@Arth:因爲否則我們不能保證第一次在語句中引用它們時,會在'@ prev_id'和'@ prev_date'中指定什麼值。是的,交叉連接到內聯視圖可能會被廢棄,並且可以用單獨的'SET @prev_date = NULL'和'SET @prev_id = NULL'語句替換。 (用戶定義的變量會保留在會話中,我們不知道當語句開始執行時在它們中存儲了什麼值;如果這些變量沒有初始化,我們可以證明得到了「錯誤」的結果(我的首選是包含在這個聲明中udvs的初始化) – spencer7593 2014-09-25 19:44:40
有道理,謝謝你,我沒有在聲明之外思考! – Arth 2014-09-25 20:10:18