我有一个名为tasks的表和另一个命名的活动。 tasks表有一个名称和一个keyid列。活动有一个日期字段和一个任务字段,它只与tasks表中的一行相关(如果activities.task列等于tasks.keyid列,那么活动就是该任务)。但是,一项任务可以有许多活动。我想要的是查询,它返回任务的名称以及当前日期与该任务的最新活动之间的差异。
为了更好地了解这个查询为我提供了我想要的任务与keyid 10:
SELECT t.name, MIN(DATEDIFF(CURDATE(),a.adate)), t.keyid FROM tasks AS t, activities AS a WHERE (t.keyid='10') AND (a.task = t.keyid);
但是我不知道如何为所有任务获得同样的东西。所以如果我有10个任务,我需要10个结果,其中包含任务名称和今天与该任务的最新活动之间的日差。
我该如何撰写此查询?
答案 0 :(得分:0)
您可以使用任务的最后一项活动
加入任务表SELECT t.name, DATEDIFF(CURDATE(),a.adate), t.keyid
FROM tasks t JOIN activities a
ON a.task = t.keyid
AND NOT EXISTS ( SELECT 'a'
FROM activities a2
WHERE a2.task = a.task
AND a2.date > a.date
)