首页 > 解决方案 > MySQL Pass max() 列作为间隔天数

问题描述

我有传递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

标签: mysqlsqlhaving

解决方案


我强烈将此查询写为:

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


推荐阅读