Запрос на присоединение к SQL Server Дата завершена> 3 года назад - PullRequest
0 голосов
/ 19 марта 2019

У меня есть две таблицы ниже в базе данных SQL Server.

Таблица активов -

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 ]

1 голос
/ 19 марта 2019
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)
0 голосов
/ 19 марта 2019

это должно дать вам то, что вы хотели.Вы группируете по Id & AssetName и находите Max 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...