【问题标题】:Last occurrence of foreign key in reference table mysql引用表mysql中最后一次出现的外键
【发布时间】:2012-08-21 15:12:26
【问题描述】:

我有两个表: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),然后是每个打开的 Return.idstagelastSeen

问题是我不知道如何在 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

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

【问题讨论】:

    标签: php mysql subquery


    【解决方案1】:

    这应该可行。

    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:

    此方法将为每个rid 找到MAX(id),然后根据该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 Fiddle

    【讨论】:

    • 这很接近了,但是我不想按阶段分组,因为我希望确定 stagelastSeen 每个 rid 的最后一次出现当前当我删除“GROUP BY stage" 我返回到我最初得到的相同结果,其中输出的阶段不是实际的当前阶段,而是原始阶段。
    • @Eric 是 MAX(id) 等价于 MAX(lastSeen)ridReturn_Details
    • @Eric 我已经修改了我的查询。你介意试试修改后的版本吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2011-01-11
    • 2017-10-31
    • 2012-01-12
    相关资源
    最近更新 更多