我无法将MAX(t.to_days) as max_days
传递给DATE_ADD(t.date, INTERVAL max_days DAY)
。
查询:
select t.*, MAX(t.to_days) as max_days
from transactions t
where CURRENT_DATE > DATE_ADD(t.date, INTERVAL max_days DAY)
返回错误:“ where子句”中的未知列“ max_days”。
我也尝试过:
select t.*, @num:=CAST(MAX(t.to_days) AS UNSIGNED)
from transactions t
where CURRENT_DATE > DATE_ADD(t.date, INTERVAL @num DAY)
但DATE_ADD
返回null
。
答案 0 :(得分:1)
没有任何示例数据和预期结果,但是我想您可以尝试使用HAVING
而不是WHERE
,因为MAX
是
聚合函数,并且判断不能使用别名。
select t.*, MAX(to_days) as max_days
from transactions t
HAVING CURRENT_DATE > DATE_ADD(`date`, INTERVAL MAX(to_days) DAY)
这是我的模拟样品sqlfiddle
答案 1 :(得分:0)
您似乎可以使用子查询来获取MAX()
值,并将其用于您的DATE_ADD()
表达式中。
SELECT
t.*
FROM
transactions t
WHERE
CURRENT_DATE > DATE_ADD(t.date, INTERVAL (
SELECT
MAX(to_days)
FROM
transactions) DAY)
答案 2 :(得分:0)
我强烈将该查询写为:
select t.*, tt.max_days
from transactions t cross join
(select max(t.to_days) as max_days from transactions t) tt
where t.date < date_sub(CURRENT_DATE, interval tt.max_days day);
为什么?此版本应该能够利用transactions(to_day)
上的索引。