我正在尝试找出给定日期范围内的最大数量。
例如,我的表包含
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数据库。
答案 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;