2017-03-01 4 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がアクティブな作業です。 IVEは

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` 

ようにしようとするもので、各タスクの最大ID(最新の活動)を取得しようとしたしかし、私は(私が探していたと思います。この上で私のロジックの権利を取得することはできませんそれで長すぎる) 助けていただければ幸いです

答えて

1

自分が集めているtask_activity_log(最後に記録されたタスクアクティビティ)をフィルタリングすることを試みています。あなたが必要なもの

はあなただけ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' 

のようなものです。

関連する問題