Пример таблицы данных:
eventDate eventText
------------------- ----------
2018-05-01 12:00:00 Some event
2018-05-02 13:00:00 Some event
2018-05-03 11:00:00 Some event
2018-05-04 11:00:00 Some event
2018-05-05 15:00:00 Some event
2018-05-06 14:00:00 Some event
2018-05-07 17:00:00 Some event
2018-05-08 16:00:00 Some event
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
Я хочу получить ВСЕ записи после определенной даты, но ТАКЖЕ записи до этой даты до определенного максимального количества записей.
ИтакНапример, допустим, я запрашиваю все записи в 2018-05-05 или позже.
SELECT * FROM myTable WHERE eventDate >= '2018-05-05' ORDER BY eventDate
eventDate eventText
------------------- ----------
2018-05-05 15:00:00 Some event
2018-05-06 14:00:00 Some event
2018-05-07 17:00:00 Some event
2018-05-08 16:00:00 Some event
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
Но теперь я хочу включить, в тот же результат запроса , максимум две записи до даты 2018-05-05.Итак:
SELECT * FROM myTable WHERE eventDate >= '2018-05-05' ORDER BY eventDate -- pseudocode "AND OR eventDate < 2018-05-05 WITH MAXIMUM EXTRA RECORDS 2
eventDate eventText
------------------- ----------
2018-05-03 11:00:00 Some event
2018-05-04 11:00:00 Some event
2018-05-05 15:00:00 Some event
2018-05-06 14:00:00 Some event
2018-05-07 17:00:00 Some event
2018-05-08 16:00:00 Some event
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
Максимальное количество записей - максимум, поэтому, если нет достаточного количества записей, это нормально и не должно быть ошибки:
SELECT * FROM myTable WHERE eventDate >= '2018-05-02' ORDER BY eventDate -- pseudocode "AND OR eventDate < 2018-05-02 WITH MAXIMUM EXTRA RECORDS 10
eventDate eventText
------------------- ----------
2018-05-01 12:00:00 Some event
2018-05-02 13:00:00 Some event
2018-05-03 11:00:00 Some event
2018-05-04 11:00:00 Some event
2018-05-05 15:00:00 Some event
2018-05-06 14:00:00 Some event
2018-05-07 17:00:00 Some event
2018-05-08 16:00:00 Some event
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
Я также хочу, чтобы она была действительнойесли никакие записи не соответствуют начальным условиям;в этом случае вернуть только две записи:
SELECT * FROM myTable WHERE eventDate >= '2018-06-30' ORDER BY eventDate -- pseudocode "AND OR eventDate < 2018-06-30 WITH MAXIMUM EXTRA RECORDS 2
eventDate eventText
------------------- ----------
2018-05-09 12:00:00 Some event
2018-05-10 11:00:00 Some event
Можно ли сделать это одним запросом?
Также желательно сделать это без хранимой процедуры или функции, если это возможно.
Вариант использования - это API, который будет возвращать «список всех текущих и будущих записей, включая самые последние две предыдущие записи до текущего времени»