2
我試圖從最後匹配property_id前10天獲取所有行。問題與DATE_SUB()和MIN()
以下查詢是我想出的,但HAVING部分不起作用。
SELECT *
FROM tab t
WHERE t.property_id=1
GROUP BY t.property_id
HAVING t.creation_date BETWEEN DATE_SUB(MIN(t.creation_date), INTERVAL 10 DAY) AND MIN(t.creation_date)
ORDER BY t.creation_date DESC
它返回匹配PROPERTY_ID的所有行,不檢查的日期。起初我以爲忽略了它,但經過幾次測試後,我意識到錯誤確實在這條線上。
,因爲我可以通過修改我的查詢看到,測試下面的工作完美:
HAVING t.creation_date BETWEEN DATE_SUB('2017-05-29 00:00:00', INTERVAL 10 DAY) AND '2017-05-29 00:00:00'
這一個太:
HAVING t.creation_date BETWEEN DATE_SUB('2017-05-29 00:00:00', INTERVAL 10 DAY) AND MIN(t.creation_date)
但不是這一個:
HAVING t.creation_date BETWEEN DATE_SUB(MIN(t.creation_date), INTERVAL 10 DAY) AND '2017-05-29 00:00:00'
所以作爲一個結論,我認爲這部分會遇到TER值的煩惱是:
DATE_SUB(MIN(t.creation_date), INTERVAL 10 DAY)
- 哪有那部分讓我HAVING沒用?
- 爲什麼我不能或不應該使用DATE_SUB()和MIN()在一起的原因嗎?
- 如果是這樣,有沒有辦法繞過這個限制?
編輯,並回答
以下scaisEdge的答案好了,並且以位從我的部分修改,對我來說是理想的MySQL代碼如下:
SELECT *
FROM table t
INNER JOIN
(
SELECT MAX(creation_date) AS early_date
FROM table t
WHERE t.property_id=1
) AS sub
WHERE t.property_id= 1 AND t.creation_date BETWEEN DATE_SUB(sub.early_date, INTERVAL 60 DAY) AND sub.early_date
我仍然有一些困難,理解爲什麼在這樣的情況下表現得如此糟糕,從現在開始我會更加謹慎地使用它。
不幸的是,它不工作,它得到我所有的行,沒有檢查t.property或BETWEEN。 – DuffautM
creation_date列是什麼樣的數據? – scaisEdge
一個時間戳列 – DuffautM