MYSQL Left加入最后一行结果

时间:2011-09-20 13:17:25

标签: mysql

我需要一些MYSQL帮助。

我有一个名为Tickets的表和一个名为statusLogs的表,我该怎么做:

select 
  t.*,
  sl.statusId
from
  ticket LEFT JOIN (
    select * from statusLog where ticket_ticketId = t.ticketId order by statusLogId DESC LIMIT 1
  ) sl

基本上,我想在一个声明中为给定的票号选择最后一个statusLog。

2 个答案:

答案 0 :(得分:23)

这是未经测试的,但这是我的方法之一:

SELECT t.*, sl1.statusId
FROM ticket AS t
LEFT JOIN statusLog AS sL1 ON t.ticketId = sL1.ticketId 
LEFT JOIN statusLog AS sL2 ON t.ticketId = sL2.ticketId AND sL1.statusLogId < sL2.statusLogId 
WHERE sL2.statusLogId IS NULL

答案 1 :(得分:2)

试试这个。它加入statusLog的子选项,为每个statusLogId提取最高(因此我认为最近)ticket_ticketId。这将检索票证的statusLogId。然后,进一步的加入会将statusId与位于第一个联接中的statusLogId匹配。

SELECT
  t.*,
  slid.statusId
FROM
  ticket t LEFT JOIN (
    SELECT ticket_ticketId, MAX(statusLogId) AS statusLogId FROM statusLog GROUP BY ticket_ticketId
  ) sl ON t.ticketId = sl.ticket_ticketId
  JOIN statusLog slid ON slid.statusLogId = sl.statusLogId