mysql pass max()列作为间隔天数

camsedfj  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(342)

我传球有问题 MAX(t.to_days) as max_daysDATE_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\u 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 .

ogq8wdun

ogq8wdun1#

看起来可以使用子查询来获取 MAX() 在你的生活中珍惜和利用它 DATE_ADD() 表情。

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

i2loujxw2#

我强烈要求:

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

f4t66c6m

f4t66c6m3#

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

这是我的模拟小提琴样品

相关问题