Sql server SQL Server加入查询日期已完成>3年

Sql server SQL Server加入查询日期已完成>3年,sql-server,join,Sql Server,Join,我在SQL Server数据库中有以下两个表 资产表- Id, AssetName 检查表- Id, AssetId, (<- This is Id in the Assets table) InspectionName, DateStarted, DateDue, DateCompleted 一项资产可以在“检查”表中列出多个检查。如何创建资产最新检查时间大于3年的查询?最新检查的完成日期>3年前 我当前的查询: SELECT t1.Id, t1.AssetName FROM [As

我在SQL Server数据库中有以下两个表

资产表-

Id,
AssetName
检查表-

Id,
AssetId, (<- This is Id in the Assets table)
InspectionName,
DateStarted,
DateDue,
DateCompleted
一项资产可以在“检查”表中列出多个检查。如何创建资产最新检查时间大于3年的查询?最新检查的完成日期>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())
谢谢
保罗。

这会给你想要的。您可以按Id和AssetName分组,找到最大完成日期,并与所需的日期进行比较

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

显示您现在的查询选择t1.Id,t1.AssetName从[Assets]作为t1内部联接[Inspections]作为t1上的t2.Id=t2.AssetID其中[DateCompleted]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)