【发布时间】:2018-03-30 14:49:05
【问题描述】:
我正在尝试创建一个数据库来管理设备的维护。我有两张桌子:
- 一个(库存)包含每件设备的详细信息,包括购买日期和服务期限,
- 包含已完成工作的详细信息 (WorkDone),包括执行工作的日期 (Work Date)。
我想要一个显示下次维修日期的查询。到目前为止,我有:
SELECT Max(DateAdd('m', [Inventory].[Service Period],
[WorkDone].[Work Date])) AS NextServiceDate,
Inventory.Equipement
FROM Inventory INNER JOIN WorkDone ON Inventory.ID = WorkDone.Equipment
GROUP BY Inventory.Equipement
只要已为给定的设备注册了某些已完成的工作,此方法就可以正常工作。如果没有进行任何工作,我希望 NextServiceDate 也显示
DateAdd('m',[Inventory].[Service Period], [Inventory].[Purchase Date])
但是,我无法弄清楚如何获取 SQL/MS 访问权限以比较两个值并仅显示两者中的较大值。通过阅读,我认为我应该能够进行子查询,但我无法弄清楚如何分阶段进行。
我一直在尝试从这里改编@MikeTeeVee 的答案:Is there a Max function in SQL Server that takes two values like Math.Max in .NET?。但是我不断收到错误消息,说查询不是聚合函数的一部分,我不确定我做错了什么。例如,我试过:
SELECT Inventory.Equipement,
(SELECT MAX(NSD_proxy)
FROM (VALUES
(Max(DateAdd('m', Inventory.[Service Period], WorkDone.[Work Date]))),
(DateAdd('m', Inventory.[Service Period], Inventory.[Purchase Date])))
AS FUNCTION(NSD_proxy)
) AS NextServiceDate,
FROM Inventory INNER JOIN WorkDone ON Inventory.ID = WorkDone.Equipment
GROUP BY Inventory.Equipement
其中有一些语法错误。
【问题讨论】: