代码之家  ›  专栏  ›  技术社区  ›  Johrn

MySQL-如何从最接近起点的点获取范围?

  •  1
  • Johrn  · 技术社区  · 15 年前

    表结构-

    int PrimaryKey
    DateTime Date
    int Price
    

    从…起 :

    除非

    :

    结束日期。

    SELECT Date, Price
    FROM table1
    WHERE Date <= $end
    AND Date >= 
    (
      SELECT Date
      FROM table1
      WHERE Date <= $start
      ORDER BY Date DESC
      LIMIT 1
    )
    

    子查询获取小于或等于开始值的最大日期,然后将其用作主查询范围的低端。有什么建议可以加入“除非”条款吗?

    例如,给定一个带有日期的表:

    Jan 1, 2009
    Feb 1, 2009
    Mar 1, 2009
    Apr 1, 2009
    

    我想和你谈谈 $start='Feb 18, 2009' $end='Apr 30, 2009' 返回三行:2月1日、3月1日、4月1日(2009年2月1日是小于或等于$start的最大日期)。

    $start='Dec 1, 2009' $end='2009年4月30日' 我希望返回所有四行(没有日期小于或等于$start,因此范围从最低日期开始)

    2 回复  |  直到 15 年前
        1
  •  1
  •   longneck    15 年前

    你不需要这个“ 没有此类日期,在这种情况下,范围的起始日期应为可用的最低日期“逻辑是因为,如果在没有前一个日期的情况下,您只需选择$start之后的所有日期,您将自动获得下一个最新日期。”。您已经知道$start和下一个最新日期之间没有记录,所以不要费心排除它们!

    WHERE Date BETWEEN coalesce((select max(date)
                                   from table1
                                  where date <= $start)
                                , $start) and $end
    
        2
  •  0
  •   mck89    15 年前

    为什么不把它和$start日期比较一下呢?

    SELECT Date, Price
    FROM table1
    WHERE Date <= $end
    AND Date >=$start