2017-03-01 53 views
0

我正在构建用户工作负载的报告图表显示活动任务,暂停和未启动,但在我的'已暂停'结果中我还检索活动作业MYSQL排除行,如果最大ID有一列是NULL

SELECT 'active' AS `status`,COUNT(DISTINCT TA.`task_id`) AS `tasks`,U.uID AS `user_id`, 
    CONCAT(U.`firstname`, ' ', U.`lastname`) AS `user` 
    FROM `tasks` TA 
    INNER JOIN `users` U on U.`uID`=TA.`scheduled_to_user` 
    INNER JOIN `ticket` T on T.`tID`=TA.`ticketFK` 
    INNER JOIN `task_activity_log` TL ON TL.`task_id`=TA.`task_id` 
    INNER JOIN `project` P ON P.`pID`=T.`pFK` 
    WHERE TA.`started_on` IS NOT NULL 
    AND TA.`completed_on` IS NULL 
    AND TL.`start_ts` IS NOT NULL 
    AND TL.`end_ts` IS NULL 
    AND T.`closed_on` IS NULL 
    GROUP BY U.`uID` 
    UNION 
    SELECT 'paused' AS `status`, COUNT(DISTINCT TA.`task_id`) AS `tasks`,U.uID AS `user_id`, 
    CONCAT(U.`firstname`, ' ', U.`lastname`) AS `user` 
    FROM `tasks` TA 
    INNER JOIN `system_users` U on U.`uID`=TA.`scheduled_to_user` 
    INNER JOIN `task_activity_log` TL ON TL.`task_id`=TA.`task_id` 
    INNER JOIN `icket` T on T.`tID`=TA.`ticketFK` 
    INNER JOIN `project` P ON P.`pID`=T.`pFK` 
    WHERE TA.`started_on` IS NOT NULL 
    AND TA.`completed_on` IS NULL 
    AND T.`closed_on` IS NULL 
    AND TL.`start_ts` IS NOT NULL 
    AND TL.`end_ts` IS NOT NULL 
    GROUP BY U.`uID` 
    UNION 
    SELECT 'not started' AS `status`, COUNT(DISTINCT TA.`task_id`) AS `tasks`,U.uID AS `user_id`, 
    CONCAT(U.`firstname`, ' ', U.`lastname`) AS `user` 
    FROM `tasks` TA 
    INNER JOIN `users` U on U.`uID`=TA.`scheduled_to_user` 
    INNER JOIN `ticket` T on T.`tID`=TA.`ticketFK` 
    INNER JOIN `project` P ON P.`pID`=T.`pFK` 
    WHERE TA.`started_on` IS NULL 
    AND TA.`completed_on` IS NULL 
    AND T.`closed_on` IS NULL 
    GROUP BY U.`uID` 

的task_activity_log表看起来是这样的:

| id | task_id | start_ts     | end_ts    | 
    1  1  2017-02-28 15:47:34   2017-02-28 15:47:34 
    2  1  2017-02-28 15:47:34   (NULL) 
    3  2  2017-02-28 15:47:34   2017-02-28 15:47:34 
    4  2  2017-02-28 15:47:34   2017-02-28 15:47:34 

ID 2是活动任务。香港专业教育学院试图通过尝试新事物得到每个任务的最大ID(最新活动),如

LEFT JOIN (SELECT MAX(`id`)AS `max_id`,`task_id` AS `task_id` FROM`task_activity_log`) MA ON MA.`task_id`=TA.`task_id` 

(SELECT MAX(`id`) FROM`task_activity_log` A1 WHERE A1.`task_id`=TA.`task_id`) AS `max_id` 

但我不能让这个我的逻辑正确的(认为我一直在寻找它太长) 任何帮助,将不胜感激

回答

1

你正在试图做的是与自身的聚合过滤task_activity_log什么(上次登录任务活动)。

你需要的是像

select ts.* 
from 'task_activity_log' as 'ts' 
join (select 'task_id', max('id') as 'id' from 'task_activity_log' group by 'task_id') as 'max_ts' 
on ts.'task_id' = max_ts.'task_id' and ts.'id' = max_ts.'id' 

这样,你只考虑到task_activity_log参照最新活动行。

相关问题