我在SQL Server数据库中有以下2个表。
资产表-
Id,
AssetName
检查表-
Id,
AssetId, (<- This is Id in the Assets table)
InspectionName,
DateStarted,
DateDue,
DateCompleted
资产可以在“检查”表中列出多个检查。我该如何创建查询,其中最近一次检查的资产大于3年? (DateCompleted> 3年前进行了最新检查)。
我当前拥有的查询
SELECT t1.Id, t1.AssetName FROM [Assets] AS t1 INNER JOIN [Inspections] AS t2 ON t1.Id = t2.AssetID WHERE [DateCompleted] < DATEADD(year, -3, GETDATE()) AND t1.Id NOT IN (SELECT t1.Id FROM [Assets] AS t1 INNER JOIN [Inspections] AS t2 ON t1.Id = t2.AssetID WHERE [DateCompleted] BETWEEN DATEADD(YEAR, -3, GETDATE()) AND GETDATE())
谢谢 保罗。
答案 0 :(得分:1)
SELECT
T1.Id,
T1.AssetName,
MAX(DateCompleted) AS InspectionDate
FROM Asset T1
LEFT JOIN Inspections T2 ON T1.Id = T2.AssetId
GROUP BY T1.Id, T1.AssetName
HAVING MAX(DateCompleted) < DATEADD(YY, -3, GETDATE()) -- OR MAX(DateExam) IS NULL (if you want to include assets that were not inspectioned at all)
答案 1 :(得分:0)
这应该给您您想要的。您按ID和AssetName分组,找到最大值DateCompleted
并与所需日期进行比较
SELECT t1.Id, t1.AssetName
FROM [Assets] AS t1
INNER JOIN [Inspections] AS t2 ON t1.Id = t2.AssetID
GROUP BY t1.Id, t1.AssetName
HAVING MAX (t2.[DateCompleted] ) < DATEADD(YEAR, -3, GETDATE())