Проверка условия во всех строках дочерней таблицы - PullRequest
0 голосов
/ 29 августа 2018

У меня есть две таблицы, например:

Задачи Таблица:

TaskID , TaskName

, а затем TaskDetails таблица:

TaskDetailsID, TaskID, CompletionDate

Я хочу написать запрос, чтобы получить все задания, в которых все детали их заданий были выполнены за последние 10 дней.

Как я могу написать такой запрос? Я не хочу использовать cursors, и я попытался использовать INNER JOIN, но он возвращает слишком много записей. Поэтому я думаю, что нужно что-то еще, но не уверен, что это такое.

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Я бы сделал это так, если вам нужно больше деталей столбца

SELECT T.Task_Name,
       TMP.TaskDetailsID, 
       TMP.TaskID,
       TMP.CompletionDate
  FROM (SELECT TD.*,
               MIN(CompletionDate) OVER
                 ( PARTITION BY TaskID ) mn_CompDate
          FROM Task_Details TD
       ) TMP
 INNER
  JOIN Task T
    ON TMP.taskID = T.taskID
 WHERE TMP.mn_CompDate >= dateadd(day, -10, getdate());
0 голосов
/ 29 августа 2018

Попробуйте это для SQL Server:

SELECT * FROM Tasks t
WHERE NOT EXISTS(SELECT 1 FROM TaskDetails
                 WHERE t.TaskID = TaskID
                 AND CompletionDate < DATEADD(DAY, -10, GETDATE()))

или это, для MySQL:

SELECT * FROM Tasks t
WHERE NOT EXISTS(SELECT 1 FROM TaskDetails
                 WHERE t.TaskID = TaskID
                 AND CompletionDate < DATE_ADD(NOW(), INTERVAL -10 DAY))
0 голосов
/ 29 августа 2018

Вы бы использовали агрегацию и having:

select td.taskid
from taskdetails td
group by td.taskid
having min(td.completiondate) >= dateadd(day, -10, getdate());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...