0

returnとreturn_detailsの2つのテーブルがあります

リターンはそのように設定されています-

 + Return
      - id
      - orderNum
      - startDate
      - endDate

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

「開いている」(Return.endDate == null)であるすべてのリターンを見つけてから、開いているごとにstageとを見つけようとしています。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

これを1つのクエリでどのように実行できるかについての支援をいただければ幸いです。前もって感謝します!

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)このメソッドはfor eachを見つけ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 に答える