我有两个表,一个看起来像这样:
ID, Datetime, User_ID, Location and Status // the rest is not relevant
另一个看起来像这样:
ID, Lastname // the rest is not relevant
现在,我只希望获得第一个表格的条目,其中每个Datetime
的{{1}}最高User_ID
,并向另一个表格询问lastname
的{{1}}。简单...
我试过这种方式(看起来最有希望,但却是假的):
User_ID
有人可以给我一个提示吗?我现在真的被困在这一段时间了,现在我开始在脑中得到一些结...... :(
答案 0 :(得分:2)
你非常接近,实际上:
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
答案 1 :(得分:1)
您所询问的内容称为correlated subqueries。在标准SQL中,可以使用APPLY
和LATERAL
构造来实现。不幸的是,并非所有RDBMS都支持这些优雅的解决方案。例如,MSSQL,Oracle和Postgresql的最新版本具有这些结构,但 MySQL 不具备这些结构。恕我直言,这对MySQL用户来说是一个真正的痛苦,因为近年来MySQL开始倾向于标准,但是以某种奇怪的方式 - 默认情况下它会关闭其非标准的黑客攻击,但是没有实现标准对应物。例如,你的问题中提出的你自己的查询在最近的MySQL版本中默认不起作用,因为不再支持子查询中的排序,为了使它工作你必须使用一些讨厌的黑客 - 添加LIMIT some_really_big_number
到子查询。