SQL Server联接查询日期已完成> 3年

时间:2019-03-19 05:04:11

标签: sql-server join

我在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())

谢谢 保罗。

2 个答案:

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