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,然后再分组。

编辑:

如果你看

DB

这里的结果应该是

约翰、西娅、埃里克、热

没有任何示例数据,很难得出您想要的结果。

但是,您在联接之前对数据进行排序,其结果尚未确定。可能是你想要的,也可能不是。但可能会随着 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