如何从SQL表中获取最新日期

时间:2014-08-22 02:25:41

标签: sql

所以我有两张桌子:

  1. workersTbl (workerName and workerID)
  2. workersLogTbl (workerID and workerLogTime)
  3. e.g。 workerTbl: workerName = John Smith | workerID = 5

    当你拉动workerLogTbl时(即

     SELECT * FROM workerLogTbl where workerID = 5
    

    这应该会让您多次登录。

    如何提取所有工作人员姓名并提取最新登录时间(假设我使用workerID加入两个表)?

    感谢。

3 个答案:

答案 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