我有两个表,例如:
任务表:
TaskID , TaskName
,然后 TaskDetails 表:
TaskDetailsID, TaskID, CompletionDate
我想写一个查询给我所有任务,这些任务的所有任务详细信息已在最近10天内完成。
如何编写这样的查询?我不想使用cursors
,并且尝试使用INNER JOIN
,但是它返回太多记录。因此,我认为还需要其他一些东西,但不确定是什么。
答案 0 :(得分: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());
答案 1 :(得分: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))
答案 2 :(得分:0)
您将使用聚合和having
:
select td.taskid
from taskdetails td
group by td.taskid
having min(td.completiondate) >= dateadd(day, -10, getdate());