代码之家  ›  专栏  ›  技术社区  ›  Sharad Kale

mysql pass max()列作为间隔天

  •  1
  • Sharad Kale  · 技术社区  · 8 年前

    我传球有问题 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 回复  |  直到 8 年前
        1
  •  1
  •   D-Shih    8 年前

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

        2
  •  0
  •   Progman    8 年前

    看起来您可以使用子查询来获取 MAX() 重视并使用它 DATE_ADD() 表达。

    SELECT
        t.*
    FROM
        transactions t
    WHERE
        CURRENT_DATE > DATE_ADD(t.date, INTERVAL (
            SELECT
                MAX(to_days)
            FROM
                transactions) DAY)
    
        3
  •  0
  •   Gordon Linoff    8 年前

    我强烈要求:

    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) 是的。