gpt4 book ai didi

mysql - 使用 MAX 函数连接 3 个表

转载 作者:行者123 更新时间:2023-11-29 22:35:10 24 4
gpt4 key购买 nike

我有一个复杂查询的问题(至少对我来说);我已经用 for 循环完成了此操作,但我想知道是否有更好的解决方案。

我有 3 张 table 。

表:pnmaster

  1. PN(主键)
  2. 描述
  3. 类型

表:购买

  1. PN(非主要)
  2. 数量
  3. 日期

表:消耗

  1. PN(非主要)
  2. 数量
  3. 日期

我想执行一个查询,从 pnmaster 中选择类型为“X”的 PN,并加入相应的最新购买和最新消费及其每个 PN 的数量。我已经尝试过下面的一段代码,在 1 Join 下工作正常,但在 2 Join 下它会挂起至少 10 分钟。

SELECT pnmaster.PN,pnmaster.Description,buy.Quantity,consume.Quantity,
MAX(consume.Date),MAX(buy.Date) FROM pnmaster
INNER JOIN consume ON pnmaster.PN=consume.PN
INNER JOIN buy ON pnmaster.PN=buy.PN WHERE(pnmaster.Type='X')
GROUP BY PN;

示例,从 pnmaster 开始:

PN Desc
A Seal
B Screw
C Hammer

购买:

PN Qty Date
A 2 01/01/2013
A 3 01/02/2014
B 1 01/07/2011
C 7 01/05/2014
C 4 01/03/2012
C 3 01/02/2013

消耗:

PN Qty Date
A 4 01/01/2010
A 7 01/02/2012
B 3 01/07/2010
C 1 01/05/2013
C 9 01/03/2011
C 3 01/02/2015

预期结果:

PN Desc  LastBuy LastConsume LastBuyDate LastConsumeDate
A Seal 3 7 01/02/2014 01/02/2012
B Screw 1 3 01/07/2011 01/07/2010
C Hammer 3 3 01/02/2013 01/02/2015

最佳答案

对此可能有更好的查询...但您可以使用:

SELECT
m.PN
,m.Description
,(
SELECT Quantity FROM buys WHERE Date = (
SELECT MAX(Date) FROM buys WHERE PN = m.PN
)
) AS LastBuyQty
,(
SELECT MAX(Date) FROM buys WHERE PN = m.PN
) AS LastBuyDate
,(
SELECT Quantity FROM consumes WHERE Date = (
SELECT MAX(Date) FROM consumes WHERE PN = m.PN
)
) AS LastConsumeQty
,(
SELECT MAX(Date) FROM consumes WHERE PN = m.PN
) AS LastConsumeDate
FROM pnmaster AS m
WHERE m.PN = 'A';

关于mysql - 使用 MAX 函数连接 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29572237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com