0

例如,我有两个表:

任务表:

TaskID , TaskName

然后是 TaskDetails表:

TaskDetailsID, TaskID, CompletionDate

我想写一个查询来给我他们所有的任务细节在过去 10 天内完成的所有任务。

我该如何编写这样的查询?我不想使用cursors并且我尝试使用INNER JOIN但它返回的记录太多。所以我认为需要其他东西,但不确定它是什么。

4

3 回答 3

1

如果您需要更多列详细信息,我会这样做

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());
于 2018-08-29T18:46:22.263 回答
1

在 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))
于 2018-08-29T19:19:36.563 回答
0

您将使用聚合和having

select td.taskid
from taskdetails td
group by td.taskid
having min(td.completiondate) >= dateadd(day, -10, getdate());
于 2018-08-29T18:37:52.907 回答