Как включить предыдущую строку в выбранный диапазон, если условие не выполняется - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь найти максимальное число из заданных диапазонов дат.

например, моя таблица содержит

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

, и я хочу найти максимальное число в дате из 06-01-2019 до 11-01-2019

Когда я использую запрос,

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

вывод равен 2.

Но я хотел бы, чтобы startDate отсутствовал в таблице, чтобы включить предыдущую строку.Например, в предыдущем случае я хочу включить строку 05-01-2019 и, следовательно, вывод должен быть 3.

Есть ли какой-либо запрос для этого процесса или мне нужнонаписать алгоритм?

Предположим, даты в таблице отсортированы, и я использую базу данных MySQL.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

В 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;
0 голосов
/ 01 марта 2019

Вы можете сделать это, используя 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.

Эта дата может затем использоваться как минимальное значение для вашего внешнего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...