如果不满足条件,我如何在选定范围内包括上一行

时间:2019-03-01 09:04:30

标签: mysql sql

我正在尝试找出给定日期范围内的最大数量。

例如,我的表包含

   date         number
----------     --------
01-01-2019         1
05-01-2019         3
07-01-2019         2
10-01-2019         1
11-01-2019         2

,我想查找日期从 2019年6月1日 2019年1月11日的最大数量

当我使用查询时,

select max(count) from TABLE where date between startDate and endDate;

输出为2。

但是我想要的是如果startDate不在表中,以包括上一行。例如,在前一种情况下,我要包含 05-01-2019 行,因此输出应为3。

此过程是否有任何查询或需要编写算法?

假设表中的日期已排序,并且我使用的是MySQL数据库。

2 个答案:

答案 0 :(得分:1)

您可以使用subquery

SELECT MAX(number)
FROM TABLE
WHERE date >= (
    SELECT date
    FROM TABLE
    WHERE date <= startDate
    ORDER BY date DESC
    LIMIT 1
)
AND date <= endDate

子查询将返回距startDate最近的最大日期。

此日期可以用作外部查询的最小值。

答案 1 :(得分:0)

在MySQL 8+中,您可以使用lead()

select max(number)
from (select t.*, lead(date) over (order by date) as next_date
      from t
     ) t
where next_date > $start_date and
      date <= $end_date;