如何限制SQL Left JOIN只返回辅助表的最新记录

时间:2019-01-03 17:58:53

标签: mysql sql left-join

我有两个表(文档状态)。 文档字段:

id,      (int)
document,(string)
file,    (string)
creation (date) 

状态字段:

id,          (int)
id_document, (int)
status,      (string)
last_update  (date)

id_document 显然与第一张表中的 id 匹配。

第一个表保存与文档有关的数据,第二个表保存第一个表的文档处理状态的更新状态。 我需要创建一个视图以显示仅其最新到达状态(如果有)的文档列表。

我写了这个查询,但是可以进行正确的联接,但是我无法将其限制为最后一个状态:

SELECT
 documents.*, states.status, states.last_update  
FROM
 documents
LEFT JOIN states ON states.id = documents.id
ORDER BY states.last_update

我尝试过DISTINCT,DISTINCTROW,但没有运气。...

3 个答案:

答案 0 :(得分:1)

这应该提供您想要的内容(可能存在一个更优雅的解决方案):

  select d.*,
         s.status, 
         s.last_update
  from   documents d,
         states s
  where  s.id = d.id
  and    s.last_update = ( select last_update
                           from   states
                           where  id = d.id
                           order by last_update desc
                           limit 0,1 )
  or     s.last_update is NULL;

答案 1 :(得分:0)

也许可行:

c=c.drop('adjTransactionDate','GroupByFld')

答案 2 :(得分:0)

使用每个文档具有max(last_status)的子查询。然后将子查询内部连接到您对文档和last_status的查询。