我需要一些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。
答案 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