SQL Server查询以从重复发生的事件中获取下一个最近的日期

时间:2016-06-28 06:55:43

标签: sql sql-server date

这是我的情景。我有一张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),如果它在过去并返回它而不检查表中的其他日期。

1 个答案:

答案 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