我一直在努力与查询,我不知道它是否可能在纯sql或需要由php支持。多个日期范围股票超订查询
基本上我想生成一个订单报告,列出系统中超额预订的产品。
表结构:
订单
id int
bookingStart DATETIME
bookingEnd DATETIME
ORDER_LINES
id int
qty int
product_id int
booking_id int
产品
id int
stock int
一个订单可以包含多行具有相同的产品。因此,订单上的每个产品都需要有一个SUM。有没有人有任何建议,以完成这个最好的方式?
我曾尝试与子查询一个特定的时间间隔循环,但它并没有考虑到不同的预订和我在这里有点卡住了,如果能有一个单一的查询来完成的重叠:
SELECT (SELECT SUM(lin2.qty) FROM booking_lines lin2,orders b2
WHERE
lin2.product_id=e.id AND
b2.id=lin2.booking_id AND (
(b2.bookingStart BETWEEN b1.bookingStart AND b1.bookingEnd) OR
(b2.bookingEnd BETWEEN b1.bookingStart AND b1.bookingEnd) OR
(b2.bookingStart < b1.bookingStart AND b2.bookingEnd > b1.bookingEnd)
) as booked SUM(lin1.qty)
FROM orders b1
LEFT JOIN order_lines lin1 ON b1.id=lin1.booking_id
LEFT JOIN products e ON e.id=lin1.product_id
(
(b1.bookingStart BETWEEN '$s' AND '$e') OR
(b1.bookingEnd BETWEEN '$s' AND '$e') OR
(b1.bookingStart < '$s' AND b1.bookingEnd > '$e')
)
GROUP BY b1.id,lin1.product_id
问题 如果我们有产品x与股票10。
订单1已经预订了3乘积x 订单2已预订5乘积x 订单3已预订8产品下面X
线条表示预约的时间跨度
__ _ ___订单1 x:3_ __ _
_ __订单2×:5_ __ _ _
_ __ _ __ _ ___订单3 x:8_ __ _ __
__为了4×2_
因此,它仅在3个数量级重叠的产品X实际上是超额预定,有什么我无法弄清楚是如何创建一个查询能够检测到。
欢迎来到StackOverflow!请发布样本数据,基于它的期望输出,以及迄今为止所尝试的内容,以便我们看到您的努力。 – peterm
在您的查询中,您有一个名为'booking_lines'的表的'LEFT JOIN'。你是指'order_lines'还是完全不同的表? – tftd
是的,它的order_lines – sbdd