php - SQL 相关子查询 - MAX 所需的帮助

标签 php mysql correlated-subquery

我有两个表,'延期交货'和'sku'

sku

id | orderdate | sku | expectedship

延期交货

orderdate | ordernum | saleschannel | sku | expectedship

在 sku 表中,是根据订单日期具有不同预期发货日期的项目列表。

例如

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 是可以订购多个项目的唯一引用。

例如

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 的预期发货更新为最大值?

最佳答案

关于我在评论中提到的内容,您可以将两个查询连接在一起...我会尝试复制它以确保它有效..但是您的日期格式已关闭,我没有时间格式化他们都是。

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;

DEMO

关于php - SQL 相关子查询 - MAX 所需的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204787/

相关文章:

php - 触发器不起作用 - 在插入之前更改表以添加新列

php - 用图像替换动态文本

php - 在文本区域中输入数字或字符时如何减少计数

mysql - pentaho数据集成查询sql错误(子查询)

mysql - 德鲁巴 : How can I know if the db is mysql or postgres

php - 我无法使用 codeigniter 从 mysql 中删除

sql - 在 postgresql 的子查询中使用外部查询结果

mysql - 更新子查询的 WHERE 子句中的 UNION

MySQL:为什么子查询中的 where 子句对另一个子查询的结果不起作用?

javascript - Web 应用程序选择选项中的文本框