这是我的情景。我有一张FirstMaintenanceEventDate
的表格,有些数据在FirstMaintenanceEventDate
的某些天后重复出现。我需要通过SQL Server查询找到的是获取它们中每行的最近日期。
例如:上个月有一个数据行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 我试过按照Jatin Patel在下面的回答中提出的追问。
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),如果它在过去并返回它而不检查表中的其他日期。
答案 0 :(得分:0)
试试这个,
SELECT TOP 1 *,
CASE WHEN FirstMaintenanceEventDate < GETDATE() THEN (Getdate()+RecurringDays) ELSE FirstMaintenanceEventDate END AS MaintenanceEventDate
FROM FIS_MaintenanceEventInstance
WHERE VehicleName ='600-GUR'
ORDER BY MaintenanceEventDate ASC