MYSQL Left加入最后一行结果

sha*_*ess 8 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
Run Code Online (Sandbox Code Playgroud)

基本上,我想在一个语句中为给定的票号选择最后一个statusLog.

小智 24

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

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
Run Code Online (Sandbox Code Playgroud)

  • 这就像说"从票证加入状态日志(sL1)中选择,其中ticketID匹配且没有更新的状态(sL2)" (2认同)
  • 仅当您只有 2 条记录时,它才按预期工作,因为它显示第二条记录而不是最后一条记录。 (2认同)

Mic*_*ski 3

尝试这个。它加入了一个子选择,其中每个子选择的statusLog拉力最高(因此我认为是最近的)。这将检索票证的 。然后,另一个连接将与第一个连接中的 进行匹配。statusLogIdticket_ticketIdstatusLogIdstatusIdstatusLogId

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
Run Code Online (Sandbox Code Playgroud)