更新时间:2022-04-09 22:57:15
我花了很多时间研究这个问题,这个问题是mysql的一个基本问题,即如果内部查询位于查询的FROM部分,则不能在内部查询中引用外部查询,即使内部查询位于SELECT部分,也可以引用外部查询。
至于从交付日期历史记录中获取第一条和最后一条记录,我发现了这个查询,它能以可接受的性能生成正确的结果。
SELECT odr.order_id,
first_change.projected_date AS initial_projected_dispatch_date,
last_change.projected_date AS final_projected_dispatch_date
FROM order AS odr
LEFT JOIN (
SELECT
order_id,
MIN(order_delivery_projection_id) AS first_id,
MAX(order_delivery_projection_id) AS last_id
FROM order_delivery_projections
GROUP BY order_id
) AS change_record_finder ON change_record_finder.order_id = odr.order_id
LEFT JOIN order_delivery_projections AS first_change ON first_change.order_delivery_projection_id = change_record_finder.first_id
LEFT JOIN order_delivery_projections AS last_change ON last_change.order_delivery_projection_id = change_record_finder.last_id
WHERE -- where clauses go here
Matt的解决方案本来可以在其他SQL版本中工作,但是MySQL缺乏所需的功能,无法让他的正确答案工作。