【发布时间】:2016-06-28 06:55:42
【问题描述】:
这是我的场景。我有一张带有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
任何建议将不胜感激。
注意:如果您需要更多信息,请现在告诉我。
已编辑 正如 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)并返回它而不检查表中的其他日期。
【问题讨论】:
-
现在你说的是
mysql还是mssql?你把两个名字混在一起...... -
如果您的
WHERE子句中有FirstMaintenanceEventDate >= GETDATE(),那么CASE中的表达式:WHEN FirstMaintenanceEventDate < GETDATE()可以永远是的 - 所以整个CASE表达式是无用的,不会有任何帮助..... -
@arkascha 对不起,如果我让你感到困惑。这是 mssql。
-
@marc_s 我知道第二个查询不正确。那么您有什么想法可以完成这项工作,否则我是否必须使用单独的计算来找出重复日期而不使用相同的查询?
标签: sql sql-server date