MySQL 将 max() 列作为间隔天数传递

MySQL Pass max() column as interval days

我在将 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 clause' 中的未知列 '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

没有任何示例数据和预期结果,但我想您可以尝试使用 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

看起来您可以使用子查询来获取 MAX() 值并在您的 DATE_ADD() 表达式中使用它。

SELECT
    t.*
FROM
    transactions t
WHERE
    CURRENT_DATE > DATE_ADD(t.date, INTERVAL (
        SELECT
            MAX(to_days)
        FROM
            transactions) DAY)

我强烈将此查询写为:

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).

上的索引