所以我有两张桌子:
workersTbl (workerName and workerID)
workersLogTbl (workerID and workerLogTime)
e.g。 workerTbl: workerName = John Smith | workerID = 5
当你拉动workerLogTbl时(即
) SELECT * FROM workerLogTbl where workerID = 5
这应该会让您多次登录。
如何提取所有工作人员姓名并提取最新登录时间(假设我使用workerID
加入两个表)?
感谢。
答案 0 :(得分:0)
你可以尝试:
select l.*
from workerlogtbl l
inner join workerstbl w on l.workerid = w.workerid
where l.workerid = 5
order by l.workerlogtime desc
我所做的是将两个表与两个表中的公共字段连接在一起,然后由workerlogtime按降序排序。如果您需要有关联接的更多信息,请查看here
答案 1 :(得分:0)
第一种方法是使用内部联接,假设您感兴趣的每个工作者都在workersLogTbl中有一个条目
SELECT w.workerName, max(wl.workerLogTime) as LastLogTime
FROM workersTbl w
INNER JOIN workersLogTbl tl on (w.workerId = wl.workerId)
WHERE (w.workerId = 5)
GROUP BY w.workerName
第二种方式使用外连接。这对于捕获那些在workersLogTbl中没有条目的工人很有用。请注意,如果workersLogTbl中没有相应的条目,则LastLogTime将为null。
SELECT w.workerName, max(wl.workerLogTime) as LastLogTime
FROM workersTbl w
LEFT OUTER JOIN workersLogTbl tl on (w.workerId = wl.workerId)
WHERE (w.workerId = 5)
GROUP BY w.workerName
请注意,通常不需要outer
字词:left join
通常就足够了。
第三种方法是使用子查询。如果您还想在同一查询中获取其他聚合结果,这将非常有用。例如,如果我们想要工作人员的第一个和最后一个记录时间,例如:
SELECT w.workerName,
(SELECT MAX(wl.workerLogTime) FROM workersLogTbl wl WHERE wl.workerId = w.workerId) as LastLogTime,
(SELECT MIN(wl.workerLogTime) FROM workersLogTbl wl WHERE wl.workerId = w.workerId) as FirstLogTime
FROM workersTbl w
WHERE (w.workerId = 5)
旁注:
不要在最后用Tbl
命名您的表。很明显,这是一个表,不需要后缀,只是噪音。另外,对列名使用常规大小写。即:WorkerId
而不是workerId
答案 2 :(得分:0)
到目前为止你尝试了什么?尝试添加GROUP BY w.workerId
子句并在SELECT列表中添加聚合函数MAX(t.workerLogTime)
。 -
SELECT w.workerId
, MAX(t.workerLogTime) AS latest_time
FROM worker w
LEFT
JOIN workerLogTbl t
ON t.workerId = w.workerId
GROUP BY w.workerId
ORDER BY w.worderId