Это мой сценарий. У меня есть таблица с FirstMaintenanceEventDate
и некоторые данные повторяются через определенные дни с FirstMaintenanceEventDate
. То, что мне нужно выяснить через запрос SQL Server, - это получить ближайшую дату каждой строки из них.Запрос SQL Server для получения ближайшей даты от повторяющихся событий
Ex: в прошлом месяце есть строка данных FirstMaintenanceEventDate
, и она будет повторяться через 40 дней, следующего месяца. Точно так же здесь много событий. Некоторые из них имеют FirstMaintenanceEventDate
в будущем. Из всех этих элементов мне нужно получить ближайшую дату для каждой строки.
Я мог бы получить ближайшую дату, не учитывая повторяющийся процесс.
Это мой запрос
SELECT TOP 1 *
FROM FIS_MaintenanceEventInstance
WHERE VehicleName = '600-GUR'
AND FirstMaintenanceEventDate >= GETDATE()
ORDER BY FirstMaintenanceEventDate ASC
нужно обновить его рассмотреть повторить события, как я описал выше. Возможно, что-то вроде этого, но это неверно.
SELECT TOP 1 *
FROM FIS_MaintenanceEventInstance
WHERE
VehicleName = '600-GUR'
AND FirstMaintenanceEventDate >= GETDATE()
AND CASE
WHEN FirstMaintenanceEventDate < GETDATE()
THEN (Getdate() + RecurringDays)
END
ORDER BY FirstMaintenanceEventDate ASC
Любое предложение будет оценено по достоинству.
ПРИМЕЧАНИЕ. Если вам нужна дополнительная информация, пожалуйста, позвольте мне сейчас.
EDITED Я попытался выполнить запрос, как предложил Джатин Пател в своем ответе ниже.
SELECT TOP 1 *,
CASE WHEN FirstMaintenanceEventDate < GETDATE() THEN DateAdd(day,RecurringDays,FirstMaintenanceEventDate)
ELSE FirstMaintenanceEventDate END AS MaintenanceEventDate
FROM FIS_MaintenanceEventInstance
WHERE VehicleName ='600-GUR'
ORDER BY MaintenanceEventDate ASC
Это не работает должным образом. После вычисления даты повторения (здесь это MaintenanceEventDate) также следует учитывать, когда вы получаете ближайшую дату. По этому запросу вычисляется повторяющаяся дата (MaintenanceEventDate), если она находится в прошлом, и возвращает ее без проверки с другими датами в таблице.
Теперь вы говорите о '' mysql' или mssql'? Вы смешиваете оба имени ... – arkascha
Если у вас есть 'FirstMaintenanceEventDate> = GETDATE()' в предложении 'WHERE', то выражение в' CASE': 'WHEN FirstMaintenanceEventDate
@arkascha Извините, если я вас смутил. Это mssql. –