我遇到了复杂查询的问题(至少对我而言);我用for循环完成了这个,但我想知道是否有更好的解决方案。
我有3张桌子。
表:pnmaster
表:购买
表:消费
我想执行一个查询,从pnmaster中选择Type =“X”的PN,并加入相应的最新买入和最新消费量以及每个PN的数量。我已经尝试了下面这段代码并且可以正常使用1个Join,但是2个挂起至少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
答案 0 :(得分:0)
对此可能有更好的查询...但您可以使用:
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';