Mysql 在合并结果中分组前的顺序
我有两张桌子:Mysql 在合并结果中分组前的顺序,mysql,sql,Mysql,Sql,我有两张桌子: 用户表 “体验”表,其中包含当前用户就读的学校的相关信息。此表可以包含多个学校(即以前的学校历史,甚至工作) 我希望获取users表,然后还获取当前学校(通过订购:exp\u date) 查询如下所示: SELECT u.user_id, u.firstname, pn.programme_name, e.exp_start, en.firstname AS name FROM edu_users u LEFT JOIN edu_experi
- 用户表
- “体验”表,其中包含当前用户就读的学校的相关信息。此表可以包含多个学校(即以前的学校历史,甚至工作)
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)是我需要的结果-不应获取下面与用户id 1关联的两个结果
我如何实现这个目标?我尝试过使用groupbyuser\u id
,但是数据在排序之前是分组的,因此结果如下所示:
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
有什么想法吗?我已经尝试过这个问题中描述的min(),但它不起作用。在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
根据子选择加入以获取每个用户的最新体验,然后根据体验(及以后)加入该子选择以获取其他详细信息 像这样的
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
请参阅上面链接的相关问题。我想你应该使用MAX(exp_start)而不是MIN。谢谢-我已经尝试了MAX和MIN相同的结果。你好-问题是上面的查询只能获取1个结果。