mysql:在子查询中引用主查询

时间:2017-03-27 10:37:09

标签: mysql sql

我有2个表:Orders和order_line

在订单中我有以下数据:

rm -rf node_modules && npm cache clean && npm install

在有序线上有以下数据:

id | name   | order_date
1  | order 1| 2014-01-01
2  | order 2| 2015-01-01
3  | order 3| 2016-01-01

订单行确实有日期和状态

现在我想知道在给定的月/年中有多少行具有给定状态。 例如,我预计2014 - 08年的状态为“新”,值为1,2016 - 03年的“已取消”值为2。 要报告这一点,我需要以某种方式获取每个订单的最新order_line行,并报告。如果我只有一个订单,我可以得到这样的最新订单:

id | Order_id | order_status |status_date
1  | 1        | New          | 2014-01-01
2  | 1        | Shipped      | 2014-10-01
3  | 2        | New          | 2015-01-01
4  | 2        | Canceled     | 2015-03-01
5  | 3        | New          | 2016-01-01
6  | 3        | Canceled     | 2016-02-01

我想以某种方式将子查询链接到我猜的父查询,但我无法弄清楚如何做到这一点。当我尝试用“where order_id = o.id”替换子查询中的1时,我得到错误代码:1054。'where子句'中的未知列'o.id'

创建/填充样本表的代码:

select orderline.* from orders o 
join (select * from orderline
      where order_id =  1
      and status_date = (select max(status_date) 
                        from orderline 
                        where order_id = 1
                        and status_date < MAKEDATE(2018, 8))) as orderline on orderline.order_id = o.id 
where o.id = 1;

1 个答案:

答案 0 :(得分:2)

我想你想要这样的东西:

select ol.order_status, count(*)
from orderline ol
where ol.status_date = (select max(ol2.status_date)
                        from orderline ol
                        where ol2.order_id = ol.order_id and
                              ol2.status_date < '2014-08-01'
                       )
group by ol.order_status;

这将返回具有特定日期(子查询中的日期)的给定状态的订单行数。