MySQL通过max()列作为间隔天

时间:2018-07-22 19:24:19

标签: mysql sql having

我无法将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

3 个答案:

答案 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)上的索引。