gpt4 book ai didi

php - MYSQL 如果最大 id 有一列为 NULL,则排除行

转载 作者:行者123 更新时间:2023-11-29 10:59:15 33 4
gpt4 key购买 nike

我正在构建用户工作负载的报告图表,显示事件任务、已暂停和未启动的任务,但在“已暂停”的结果中,我还检索了事件作业

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`

但我无法正确理解这一点(我想我已经看它太久了)任何帮助将不胜感激

最佳答案

您想要做的是使用其自身的聚合(上次记录的任务事件)来过滤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 行。

关于php - MYSQL 如果最大 id 有一列为 NULL,则排除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42527574/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com