我有两张桌子,'延期交货'和'sku'
SKU
id | orderdate | sku | expectedship
缺货
orderdate | ordernum | saleschannel | sku | expectedship
在sku表中,是根据订单日期具有不同预期发货日期的项目列表。
E.g。
1 | Apple | 01.08.2014 | 19.10.2014
2 | Apple | 02.08.2014 | 28.10.2014
3 | Pear | 02.08.2014 | 20.10.2014
4 | Grape | 02.08.2014 | 22.10.2014
在延期交货表中,是已订购商品的清单。 Ordernum是可以订购多个商品的唯一参考。
E.g。
02.08.2014 | order1 | a | apple
02.08.2014 | order1 | a | grape
02.08.2014 | order1 | a | pear
03.08.2014 | order2 | c | banana
我想要实现的是每个延期交货,在该订单的所有商品中填充最大预期发货日期。
例如。
02.08.2014 | order1 | a | apple | 28.10.2014
02.08.2014 | order1 | a | grape | 28.10.2014
02.08.2014 | order1 | a | pear | 28.10.2014
03.08.2014 | order2 | c | banana | NULL
如上所示,order1显示了所有3个sku的最大/最早日期。
以下查询显示了每个sku的预计发货日期;但无法确定如何获得每个订单号的最大日期。
SELECT
backorders.orderdate,
backorders.ordernum,
backorders.saleschannel,
backorders.sku,
setup.expectedship
FROM backorders
LEFT OUTER JOIN setup ON backorders.orderdate = setup.orderdate AND backorders.sku = setup.sku
WHERE (backorders.saleschannel = 'a')
OR (backorders.saleschannel ='b')
OR (backorders.saleschannel ='c')
ORDER BY backorders.ordernum DESC
我还可以单独设法识别每个订单的最大日期:
SELECT
backorders.ordernum,
MAX(setup.expectedship) AS `MAX(expectedship)`
FROM backorders
INNER JOIN setup ON backorders.sku = setup.sku AND backorders.orderdate = setup.orderdate
WHERE (setup.orderdate = backorders.orderdate)
AND (setup.sku = backorders.sku)
AND (backorders.saleschannel = 'a')
OR (backorders.saleschannel ='b')
OR (backorders.saleschannel ='c')
GROUP BY backorders.ordernum
有没有办法可以运行第一个查询来识别每个订单行的预期出货量,然后是一个子查询来更新所有ordernum中的预期出货量到最大值?
答案 0 :(得分:1)
我在评论中提到的你可以一起加入两个查询...我会尝试复制这个以确保它有效..但你的日期格式是关闭的我没有时间将它们全部格式化。
SELECT
t.orderdate, t.ordernum,
t.saleschannel, t.sku,
t1.expectedship
FROM
( SELECT
b.orderdate, b.ordernum,
b.saleschannel, b.sku,
s.expectedship
FROM backorders b
LEFT OUTER JOIN setup s ON b.orderdate = s.orderdate AND b.sku = s.sku
WHERE b.saleschannel IN('a', 'b', 'c')
ORDER BY b.ordernum DESC
)t
LEFT JOIN
( SELECT
b.ordernum,
MAX(s.expectedship) AS expectedship
FROM backorders b
INNER JOIN setup s ON b.sku = s.sku AND b.orderdate = s.orderdate
WHERE (s.sku = b.sku)
AND b.saleschannel IN('a', 'b', 'c')
GROUP BY b.ordernum
)t1 on t1.ordernum = t.ordernum
order by ordernum;