我有两张表,一张看起来像这样:
ID, Datetime, User_ID, Location and Status // the rest is not relevant
另一个看起来像这样:
ID, Lastname // the rest is not relevant
现在我只想获取每个 User_ID
具有最高 Datetime
的第一个表的条目,并询问另一个表的 lastname
用户 ID
。简单...
我尝试过这种方式(看起来最有希望但实际上是错误的):
SELECT w.Datetime, w.User_ID, w.Status, e.Lastname
FROM worktimes AS w
INNER JOIN employees AS e
ON w.User_ID=e.ID
RIGHT JOIN (SELECT max(Datetime) AS Datetime, User_ID
FROM worktimes
WHERE Datetime>1467583200 AND Location='16'
GROUP BY User_ID
ORDER BY Datetime DESC
) AS v
ON v.User_ID=w.User_ID
GROUP BY w.User_ID
ORDER BY e.Nachname;
有人可以给我一个提示吗?我真的坚持了一段时间,现在我开始在我的脑子里打结......:(
实际上,你非常接近:
SELECT w.Datetime, w.User_ID, w.Status, e.Lastname
FROM worktimes w INNER JOIN
employees e
ON w.User_ID = e.ID LEFT JOIN
(SELECT max(Datetime) AS Datetime, User_ID
FROM worktimes
WHERE Datetime > 1467583200 AND Location = '16'
GROUP BY User_ID
) ww
ON ww.User_ID = w.User_ID AND w.DateTime = ww.DateTime
ORDER BY e.Nachname;
注意事项:
- 您确实需要加入
DateTime
值。
RIGHT JOIN
是不必要的。我用 LEFT JOIN
替换了它,但我也不确定这是否是您想要的。您可以从 INNER JOIN
开始,看看它是否会产生您想要的结果。
- 在大多数情况下,不要在子查询中使用
ORDER BY
。
- 您不需要在外部查询中使用
GROUP BY
我是一名优秀的程序员,十分优秀!