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)
.
上的索引
我在将 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)
.