【问题标题】:Join 2 tables with known variable sorting by max(date)按 max(date) 加入 2 个具有已知变量排序的表
【发布时间】:2012-11-03 15:08:51
【问题描述】:

我有 2 个表转移和设备,其中每件设备可能有多个转移。我希望通过 project id 加入这 2 个表,并返回特定项目的每件设备的最新传输。

transfers table:
tid, pid, eid, date

equipment table:
eid, ename

在我的函数中,我发送变量 $pid 以仅整理特定项目 ID 的设备转移,该项目 ID 与转移表中的设备 ID 一起存储。

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    我认为您的要求可能对我来说仍然有点不清楚,但要仅返回特定 PID 的最新“传输”和“设备”行,请执行以下操作:

    SELECT t.tid, t.pid, t.eid, e.ename, t.date
      FROM transfers t
      JOIN equipment e ON t.eid = e.eid
     WHERE t.pid = ?
       AND t.date = (SELECT MAX(t2.date) FROM transfers t2 WHERE t2.pid = ? )
    

    让我知道这是否符合您的期望。如果没有,请给我更多关于每个表中的行的信息。

    希望这会有所帮助,

    约翰...

    【讨论】:

    • 并不完美,但改变它以使其工作是有意义的。这是我的最终代码SELECT t.tid, t.pid, t.eid, e.name, e.make, e.eqid, e.model, t.date FROM transfers t JOIN equipment e ON t.eid = e.eid WHERE t.pid = $pid AND t.date = (SELECT MAX(t2.date) FROM transfers t2 WHERE t2.eid = e.eid )
    【解决方案2】:

    你想要groupwise maximum:

    SELECT *
    FROM   transfers NATURAL JOIN (
      SELECT   pid, eid, MAX(date) date
      FROM     transfers
      WHERE    pid = ?
      GROUP BY eid
    ) t JOIN equipment USING (eid)
    

    【讨论】:

    • 感谢您的回答。我之前有过类似的查询,但它仍然返回每个项目的所有设备转移。例如,我将 T40 卡车转移到 NHS3 项目,然后在 3 天后转移到 PLB 项目。查询输出两个项目的 T40 卡车。我一开始可能并不清楚它只需要在该作业上输出当前设备。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 2021-10-19
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多