我目前正在为一个需要显示订单延迟多久的电子商务系统进行报告。我有订单的预计交货日期的日志,并能够获得最初和最后日期,但做比较预计日期等更复杂的事情证明是有问题的。MySQL:引用子查询列
A(简体版)我的查询如下:
SELECT orders.order_id,
orders.date_dispatched AS actual_dispatch_date,
(
SELECT projected_date
FROM order_delivery_projections
WHERE order_id = orders.order_id
ORDER BY order_delivery_projection_id ASC
LIMIT 1
) AS initial_delivery_projection,
(
SELECT projected_date
FROM order_delivery_projections
WHERE order_id = orders.order_id
ORDER BY order_delivery_projection_id DESC
LIMIT 1
) AS final_delivery_projection
FROM orders
-- and some other joins here for additional report data
(仅供参考,我在整理上的ID,而不是日期这里,因为调度预测可以向前和向后,例如如果库存货物提前发货)。
这样可以提取一些有关订单预计交货历史的原始数据,但我想对数据进行一些额外的分析,例如初始预计出货日期,最终预计出货日期预计出货日期和实际发货日期。这是我遇到麻烦的地方。
我试着在我的SELECT子句中添加一个DATEDIFF(final_delivery_projection, initial_delivery_projection)
列,以便查看给定的传递预测已经下滑了多少天,但是MySQL不会拥有它。在字段列表
SELECT orders.order_id,
orders.date_dispatched AS actual_dispatch_date,
(
SELECT projected_date
FROM order_delivery_projections
WHERE order_id = orders.order_id
ORDER BY order_delivery_projection_id ASC
LIMIT 1
) AS initial_delivery_projection,
(
SELECT projected_date
FROM order_delivery_projections
WHERE order_id = orders.order_id
ORDER BY order_delivery_projection_id DESC
LIMIT 1
) AS final_delivery_projection,
DATEDIFF(final_delivery_projection - initial_delivery_projection) AS projection_days_revised
FROM orders
-- and some other joins here for additional report data
未知列final_delivery_projection想必你不能在select语句如果别名指的是子选择在同一语句中使用别名。
我也希望能够根据预测的结果排除WHERE子句中的顺序。例如,我想排除最终预计出货日期在最初预计日期之前下落的所有订单,理由是我只对正在进行的订单感兴趣,而不是提前发货的订单。
正在提取和处理我试图在同一个语句中获得的数据,或者我将不得不在客户端做一些后处理来处理类似这样的事情?如果在SQL中是可行的,那么它是如何完成的?
DATEDIFF的语法是否正确? 'DATEDIFF(datepart,startdate,enddate)'是我使用的。 – Matt
我在DATEDIFF上没有收到任何语法错误,文档说它只有两个参数 – GordonM