我正在尝试从两个表中提取数据,其中我需要第一个表中的每一列以及第二个表中特定id的最后一行。我有以下查询
SELECT RequestTable.*,
ProcessTable.processType,
ProcessTable.employeeId,
ProcessTable.processId
FROM RequestTable,
ProcessTable
WHERE RequestTable.requestId = ProcessTable.requestId
ORDER BY ProcessTable.processId DESC LIMIT 1;
现在这只是因为LIMIT 1而返回一个条目。如何更改此查询以便它显示以下内容:
SELECT RequestTable.*,
ProcessTable.processType,
ProcessTable.employeeId,
ProcessTable.processId
FROM RequestTable,
ProcessTable
WHERE RequestTable.requestId = ProcessTable.requestId
AND * * * * ProcessTable.processType IS
FROM THE LAST ROW
FROM ProcessTable
WHERE ProcessTable.requestId = RequestTable.requestId
我基本上是将更改记录到状态,我需要为给定的id提取最后插入的状态。
非常感谢任何帮助。
答案 0 :(得分:0)
您所谈论的两个表分别是RequestTable
和ProcessTable
?您想要每个请求以及每个请求的最新流程步骤吗?
首先,您需要针对ProcessTable
编写一个查询,该查询将为requestId
提取一条记录。在不了解您的架构的情况下,我只能猜测它看起来像这样:
SELECT
RequestID, ProcessType, EmployeeID, ProcessID
FROM
ProcessTable AS PT
WHERE
-- Exclude this record if there is another with the same RequestID but a later ProcessID
NOT EXISTS (SELECT * FROM ProcessTable AS PT2 WHERE PT.RequestID = PT2.RequestID AND PT2.ProcessID > PT.ProcessID)
这假设ProcessID
是一个递增的整数,这样最近的记录总是具有最高的ProcessID
。
完成后,我们可以轻松地将其作为子查询加入第一个表:
SELECT
RT.*,
PT.ProcessType,
PT.EmployeeID,
PT.ProcessID
FROM
RequestTable AS RT
INNER JOIN
(
SELECT
RequestID, ProcessType, EmployeeID, ProcessID
FROM
ProcessTable AS PT
WHERE
NOT EXISTS (SELECT * FROM ProcessTable AS PT2 WHERE PT.RequestID = PT2.RequestID AND PT2.ProcessID > PT.ProcessID)
) AS PT ON RT.RequestID = PT.RequestID
ORDER BY
PT.ProcessID
一个注意事项:不要在WHERE
子句中加入你的表,它会遇到麻烦(偶然会交叉加入两百万行记录?哎呀)。将您的连接逻辑放在FROM
子句中,即它所属的位置。