表名:用户
我试图查询该表,以便给我一个结果,显示-用户名-其中-上次批准的状态-按名称分组-具有manager_2为Stan
下面的预期结果图片
类似
SELECT id,name,manager_1,manager_2,department_status_fruits
FROM users
WHERE status = --- the last approved entry for (group by Name),
if manager_2 = stan
ORDER BY id DESC
LIMIT 1
SELECT id,name,manager_1,manager_2,department_status_fruits
FROM users
WHERE manager_2 = 'stan' AND status = 'approved'
group by name
ORDER BY id DESC
LIMIT 1
我尝试过的所有查询都没有给出预期的结果,实际上,我发现很难甚至形成查询来解释请求。
我想,子查询或联接是我所必须追求的,但建议联接还是我想要的。
答案 0 :(得分:0)
您需要使用一个查询,该查询返回每个名称的最后一个批准的行。有关各种方法,请参见SQL select only rows with max value on a column。
然后,您可以将其进一步过滤到manager_2 = 'stan'
的地方。
SELECT u1.*
FROM users AS u1
JOIN (SELECT name, MAX(id) AS maxid
FROM users
WHERE status = 'approved'
GROUP BY name) AS u2 ON u1.id = u2.id
WHERE manager_2 = 'stan'
ORDER BY id DESC
LIMIT 1