我有两张桌子:
我希望获取users表,然后获取当前学校(通过命令:exp_date)
查询如下所示:
SELECT
u.user_id,
u.firstname,
pn.programme_name,
e.exp_start,
en.firstname AS name
FROM
edu_users u
LEFT JOIN edu_experience e ON e.exp_user = u.user_id
LEFT JOIN edu_users en ON en.user_id = e.exp
LEFT JOIN edu_programmes pn ON pn.programme_id = e.exp_position
ORDER BY
exp_start DESC
它返回此结果:
第一个结果(来自用户ID 1)是我需要的 - 下面的两个与user_id 1相关联的结果不应该被提取。
我如何实现这个目标?我尝试使用group by user_id
,但数据在排序之前已经分组,因此结果如下所示:
有什么想法吗?我已尝试使用此问题中描述的min():ORDER BY date and time BEFORE GROUP BY name in mysql但它不起作用。
答案 0 :(得分:1)
加入一个子选择以获得每个用户的最新体验,然后加入该体验(以及之后的体验)以获取其他详细信息
像这样的东西
SELECT
u.user_id,
u.firstname,
pn.programme_name,
e.exp_start,
en.firstname AS name
FROM
edu_users u
LEFT JOIN (SELECT exp_user, MAX(exp_start) AS MaxExpStart FROM edu_experience GROUP BY exp_user) e1 ON e1.exp_user = u.user_id
LEFT JOIN edu_experience e ON e.exp_user = u.user_id AND e.exp_start = e1.MaxExpStart
LEFT JOIN edu_users en ON en.user_id = e.exp
LEFT JOIN edu_programmes pn ON pn.programme_id = e.exp_position
ORDER BY
exp_start DESC
答案 1 :(得分:0)
在MySQL上,你需要使用一个相关的子查询,只为每个用户获取“最新”记录:
SELECT
u.user_id,
u.firstname,
pn.programme_name,
e.exp_start,
en.firstname AS name
FROM
edu_users u
LEFT JOIN edu_experience e ON e.exp_user = u.user_id
LEFT JOIN edu_users en ON en.user_id = e.exp
LEFT JOIN edu_programmes pn ON pn.programme_id = e.exp_position
WHERE e.exp_start = (
SELECT MAX(exp_start) FROM edu_experience z
WHERE z.exp_user = e.exp_user)
ORDER BY
exp_start DESC