MYSQL - 左边的最大值在组合之前加入
MYSQL - Highest value on left join before group together
我希望我的左联接按 ID DESC 排序,但我无法正常工作。
SELECT u.ID,
u.ftyp,
u.navn,
u.etternavn,
u.adresse,
u.status,
u.kontaktperson,
u.email,
u.telenr
FROM
(SELECT * FROM `user` ORDER BY ftyp ASC, navn ASC) AS u LEFT JOIN
(SELECT * FROM `timesheet` ORDER BY ID DESC) AS t ON t.userID = u.ID
GROUP BY t.userID
ORDER BY u.ftyp ASC, t.ID DESC
首先在 ftyp 之后排序,然后是时间表中最高的 ID,然后再分组。
编辑:
如果你看
这里的结果应该是
约翰、西娅、埃里克、热
没有任何示例数据,很难得出您想要的结果。
但是,您在联接之前对数据进行排序,其结果尚未确定。可能是你想要的,也可能不是。但可能会随着 MySQL 的未来版本而改变,甚至只是交换数据库引擎。
LEFT OUTER JOIN 似乎无关紧要(除非您想要 1 个随机用户详细信息,因为 GROUP BY 代表所有没有时间表的用户)。
最好使用子查询来获取每个用户的最新时间表,然后将其连接到用户和时间表。假设时间表 table 有一个唯一的 id 字段,它是升序的,那么是这样的:-
SELECT u.ID,
u.ftyp,
u.navn,
u.etternavn,
u.adresse,
u.status,
u.kontaktperson,
u.email,
u.telenr
FROM `user` u
INNER JOIN
(
SELECT userID, MAX(id) AS max_id FROM `timesheet` GROUP BY userID
) t_sub
ON t_sub.userID = u.ID
INNER JOIN `timesheet` t
ON t_sub.userID = t.userID
AND t_sub.max_id = t.id
ORDER BY u.ftyp ASC, t.ID DESC
我希望我的左联接按 ID DESC 排序,但我无法正常工作。
SELECT u.ID,
u.ftyp,
u.navn,
u.etternavn,
u.adresse,
u.status,
u.kontaktperson,
u.email,
u.telenr
FROM
(SELECT * FROM `user` ORDER BY ftyp ASC, navn ASC) AS u LEFT JOIN
(SELECT * FROM `timesheet` ORDER BY ID DESC) AS t ON t.userID = u.ID
GROUP BY t.userID
ORDER BY u.ftyp ASC, t.ID DESC
首先在 ftyp 之后排序,然后是时间表中最高的 ID,然后再分组。
编辑:
如果你看
这里的结果应该是
约翰、西娅、埃里克、热
没有任何示例数据,很难得出您想要的结果。
但是,您在联接之前对数据进行排序,其结果尚未确定。可能是你想要的,也可能不是。但可能会随着 MySQL 的未来版本而改变,甚至只是交换数据库引擎。
LEFT OUTER JOIN 似乎无关紧要(除非您想要 1 个随机用户详细信息,因为 GROUP BY 代表所有没有时间表的用户)。
最好使用子查询来获取每个用户的最新时间表,然后将其连接到用户和时间表。假设时间表 table 有一个唯一的 id 字段,它是升序的,那么是这样的:-
SELECT u.ID,
u.ftyp,
u.navn,
u.etternavn,
u.adresse,
u.status,
u.kontaktperson,
u.email,
u.telenr
FROM `user` u
INNER JOIN
(
SELECT userID, MAX(id) AS max_id FROM `timesheet` GROUP BY userID
) t_sub
ON t_sub.userID = u.ID
INNER JOIN `timesheet` t
ON t_sub.userID = t.userID
AND t_sub.max_id = t.id
ORDER BY u.ftyp ASC, t.ID DESC