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