Sql server 检查子表所有行上的条件

Sql server 检查子表所有行上的条件,sql-server,tsql,Sql Server,Tsql,例如,我有两张桌子: 任务表: 然后是TaskDetails表: 我想写一个查询,给出在过去10天内完成的所有任务的详细信息 我如何编写这样的查询?我不想使用游标,我尝试使用内部联接,但它返回的记录太多。所以我认为还需要一些别的东西,但不确定是什么 您将使用聚合并具有: 您将使用聚合并具有: 如果你需要更多的专栏细节,我会这样做 SELECT T.Task_Name, TMP.TaskDetailsID, TMP.TaskID, TMP.Complet

例如,我有两张桌子:

任务表:

然后是TaskDetails表:

我想写一个查询,给出在过去10天内完成的所有任务的详细信息


我如何编写这样的查询?我不想使用游标,我尝试使用内部联接,但它返回的记录太多。所以我认为还需要一些别的东西,但不确定是什么

您将使用聚合并具有:


您将使用聚合并具有:


如果你需要更多的专栏细节,我会这样做

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

如果你需要更多的专栏细节,我会这样做

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

请为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))

请为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))


所以不使用Tasks表-父-needed?也会说syntx错误,因为CompletionDate在having中,而不是在GroupBy@Bohn . . . 这毫无意义。CompletionDate是聚合函数的参数。这是一个很好的小组。这是一个简单的问题解决方案。所以不使用Tasks表-父-needed?也表示syntx错误,因为CompletionDate位于having中,而不在GroupBy@Bohn . . . 这毫无意义。CompletionDate是聚合函数的参数。这是一个很好的小组。这是一个简单的问题解决方案。您应该标记正在使用的RDBMS。是否存在未完成的任务,即CompletionDate设置为NULL的行?您应该标记正在使用的RDBMS。是否存在未完成的任务,例如,CompletionDate设置为NULL的行?在该查询中MIN的作业是什么?获取任务的最早完成日期为什么需要最早完成日期?具体取决于。您所说的在过去10天内完成所有任务细节是什么意思?如果你的意思是,10天前没有完成任何任务细节,那就是你需要它的原因。如果你的意思是其他的,那么样本数据和预期结果将消除歧义。好的,在这种情况下,最短日期将是3个月前,它将被删除在这里,其中TMP.mn_CompDate>=dateaddday,-10,getdate;MIN在该查询中的任务是什么?获取任务的最早完成日期为什么我需要最早完成日期?取决于。您所说的在过去10天内完成所有任务细节是什么意思?如果你的意思是,10天前没有完成任何任务细节,那就是你需要它的原因。如果你的意思是其他的,那么样本数据和预期结果将消除歧义。好的,在这种情况下,最短日期将是3个月前,它将被删除在这里,其中TMP.mn_CompDate>=dateaddday,-10,getdate;