0

我有两个表:return 和 return_details

回报是这样设置的 -

 + Return
      - id
      - orderNum
      - startDate
      - endDate

 + Return_Details
      - id
      - rid (Return.id)
      - stage [this is essentially location]
      - lastSeen [timeDate last seen)

我试图找到所有“开放”的回报(其中 Return.endDate == null),然后是每个 open的stageand 。lastSeenReturn.id

问题是我不知道如何在 Return_Details 中找到最后一次出现的 Return.id。目前我可以使用 MAX 找到正确的 lastSeen 时间,但我如何抓住相应的阶段。

这是我现在使用的查询 -

 SELECT r.so, rd.lastSeen, rd.stage, r.sotype, MAX(rd.lastSeen) as last
            FROM repairs r
            JOIN repair_details rd ON r.id = rd.rid
            WHERE `enddate` IS NULL 
            GROUP BY r.so
            ORDER BY lastSeen asc

任何有关如何通过一个查询完成此操作的帮助将不胜感激。提前致谢!

4

1 回答 1

2

这应该有效。

SELECT a.id, b.stage, b.lastSeen
FROM Return a 
LEFT JOIN (SELECT rid, stage, MAX(lastSeen) AS lastSeen FROM Return_Details GROUP BY rid, stage) b ON b.rid = a.id
WHERE a.endDate IS NULL

编辑1:

此方法将找到MAX(id)每个rid,然后根据它获取详细信息MAX(id)

SELECT a.orderNum, c.stage, c.lastSeen
FROM repairs a 
LEFT JOIN 
  (SELECT rid, MAX(id) AS id FROM repair_details 
    GROUP BY rid) b ON b.rid = a.id
LEFT JOIN
  (SELECT id, stage, lastSeen FROM repair_details) c ON c.id = b.id
WHERE a.endDate IS NULL

SQL小提琴

于 2012-08-21T15:26:58.637 回答