如何编写mysql查询以获取项目详细信息和整个活动日志的最后一行?我想要一个所有项目的列表,与数据从每个项目的最新一行从行动日志,所有它的顺序由最近的行动日志日期描述。对不起,我知道这是一个常见的查询和答案必须非常容易。但我找不到解决办法。我搜索了所有可能的单词组合。我发现一些示例只需要一个字段,比如joined表中的max(id)。我找到了凝聚的解决方案,但似乎不能使它们起作用。我的问题是,我需要来自'parent'表行pl\u projects的许多字段以及来自联接表pl\u log行的许多字段,更不用说来自两次联接的同一个表的人名了。
我尝试的每种方法都会给出pl\u日志的所有行,重复pl\u项目中的行。或者,如果我在子查询中设置了限制,我只从plu日志中得到一个项目的一行。以下是我的查询不起作用:
SELECT
PJ.pj_id, PJ.pj_title, PJ.pj_location, PJ.pj_desc, PJ.pj_request, PJ.pj_date_start, PP1.pp_name AS supervisor_name, PP2.pp_name AS customer_name, ST.st_desc, logDate, logDesc
FROM PL_PROJECTS PJ
INNER JOIN PL_PEOPLE PP1 ON PJ.pj_spst_member = PP1.pp_id
INNER JOIN PL_PEOPLE PP2 ON PJ.pj_pp_id = PP2.pp_id
INNER JOIN PL_STATUS ST ON PJ.pj_status = ST.st_id
LEFT OUTER JOIN (
SELECT MAX(lg_pj_id) MaxLogID, lg_date AS logDate, lg_desc AS logDesc, lg_pj_id
FROM PL_LOG PL
ORDER BY lg_id DESC
)
LR ON LR.lg_pj_id = PJ.pj_id
GROUP BY PJ.pj_id
ORDER BY logDate DESC
LIMIT 9999999
1条答案
按热度按时间tct7dpnv1#
我认为您的问题是,当您使用max()时,您的子选择只生成一行,而每个项目需要一行(我认为是lg\u pj\u id)。
只需重写subselect就可以为每个项目生成一行,其中包含来自最近活动的信息。您的操作日志中是否有活动id?因为它看起来像lg\u pj\u id是项目的\u id。lg\u desc的含义也是未知的(或者是动作的\u log\u id?)。在子选择中尝试按项目id分组,并根据需要从相应行中选择最大值或选择每个组具有最大值的行(项目id)
感谢小组的建议,让每个项目一行。我尝试更改子查询,如下所示:
现在,我从日志中得到一行,但是它给了我max id,但不是同一行的lg\u desc!如果我单独尝试子查询:
我有这些排。你可以看到最大行,68有一个描述“30分钟skype通话。”
但是,当我尝试使用group by仅获取该行时,它会给出max lg\u id,但会给出第一个lg\u desc。我需要来自max(lg\u id)行的所有数据:
退货:
试试我评论中提到的这个: