id start_date interval period
1 2018-01-22 2 month
2 2018-02-25 3 week
3 2017-11-24 3 day
4 2017-07-22 1 year
5 2018-02-25 2 week
выше приведен мой пример данных таблицы.Даты start_dates истекают в зависимости от интервала и периода (т. е. id-1 будет иметь срок выполнения через 2 месяца после start_date, id-2 будет иметь срок выполнения через 3 недели и наоборот).период - это число (день, неделя, месяц, год).Требование заключается в том, что Клиент может указать любой период дат.скажем, с 25-06-2026 по 13-07-2026 вот так ... Я должен вернуть идентификаторы, сроки выполнения которых подпадают под этот период. Надеюсь, я ясно дал понять свой вопрос.
Я использую mysql 5.7,Я нашел способ добиться этого с помощью рекурсивных CTE (недоступно в MySQL 5.7).и есть способ достичь этого, заполняя виртуальные записи, используя встроенные подзапросы вместе с объединениями, но это снижает производительность, и мы не можем заполнять виртуальные записи каждый раз, когда приходит запрос клиента (как указано в ссылке Генерация серии дат ) Я достиг точки, чтобы получить результаты для одной даты, что очень просто.Ниже мой запрос.
SELECT b.*
FROM (SELECT a.*,
CASE
WHEN period = 'week' THEN MOD(Datediff('2018-07-22', start_date), 7 * intervals)
WHEN period = 'month'
AND Day('2018-07-22') = Day(start_date)
AND MOD(Period_diff(201807, Extract(YEAR_MONTH FROM start_date)), intervals) = 0 THEN 0
WHEN period = 'year'
AND Day('2018-07-22') = Day(start_date)
AND MOD(Period_diff(201807, Extract(
YEAR_MONTH FROM start_date)) / 12,
intervals) = 0 THEN 0
WHEN period = 'day' THEN MOD(Datediff('2018-07-22', start_date) , intervals)
end filters
FROM kml_subs a)b
WHERE b.filters = 0;
Но мне нужно сделать это для периода дат, а не для одной даты.Будем очень благодарны за любые предложения или решения.
My desired result shoud be like..
if i give two dates.say 2030-05-21 & 2030-05-27. due dates falls under those 6 dates between(2030-05-21 & 2030-05-27) will be shown in the result.
id
1
4
Мой вопрос отличается от Использование DATE_ADD с именем столбца в качестве значения интервала .Я ожидаю, что динамический способ проверки сроков на основе start_date
Спасибо, Kannan