Postgresql Postgres中的相关子查询
我有一个类似下面的查询来查找某些产品的库存详细信息。该查询工作正常,但我认为它不够高效和快速(DB:postgresql版本11) 此代码中有一个CTE“结果集”,我需要查找从缺货日期到缺货日期前7天这段时间内的“订购产品的数量”(从缺货日期算起的数量)。同样,我还需要查找收入 所以我写了两个相同的子查询,一个输出收入,另一个输出数量,这不是一个有效的步骤。所以有人对如何重写它,使它成为一个有效的代码有任何建议Postgresql Postgres中的相关子查询,postgresql,Postgresql,我有一个类似下面的查询来查找某些产品的库存详细信息。该查询工作正常,但我认为它不够高效和快速(DB:postgresql版本11) 此代码中有一个CTE“结果集”,我需要查找从缺货日期到缺货日期前7天这段时间内的“订购产品的数量”(从缺货日期算起的数量)。同样,我还需要查找收入 所以我写了两个相同的子查询,一个输出收入,另一个输出数量,这不是一个有效的步骤。所以有人对如何重写它,使它成为一个有效的代码有任何建议 WITH final as ( SELECT p
WITH final as
(
SELECT product_id,product_name,item_sku,out_of_stock_at
,out_of_stock_at - INTERVAL '7 days' as previous_7_days
,back_in_stock_at
FROM oos_base
)
SELECT product_id,product_name,item_sku,out_of_stock_at,previous_7_days
,back_in_stock_at
,(SELECT coalesce(sum(i.qty_ordered), 0) AS qty_last_7d_from_oos_date
FROM ol.orders o
LEFT JOIN ol.items i ON i.order_id = o.order_id
LEFT JOIN ol.products p ON p.product_id = i.product_id AND i.store_id = p.store_id
WHERE o.order_state_2 IN('complete','processing')
AND f.product_id=p.product_id
AND o.created_at_order :: DATE BETWEEN f.previous_7_days::DATE AND COALESCE(f.out_of_stock_at::DATE,current_date)
)
,( SELECT coalesce(sum(i.row_amount_minus_discount_order), 0) AS rev_last_7d_from_oos_date
FROM ol.orders o
LEFT JOIN ol.items i ON i.order_id = o.order_id
LEFT JOIN ol.products p ON p.product_id = i.product_id AND i.store_id = p.store_id
WHERE o.order_state_2 IN('complete','processing')
AND f.product_id=p.product_id
AND o.created_at_order :: DATE BETWEEN f.previous_7_days::DATE AND COALESCE(f.out_of_stock_at::DATE,current_date)
)
FROM final f
在上面的代码中,CTE“final”给出了两个日期“out\u of\u stock\u at”&
“前7天”。我想根据这两个日期来计算产品的数量和收入,这两个日期表示“前7天”和“缺货”
下面的查询将给出产品的数量和收入,但上述CTE中的“前7天”和“缺货”之间的时间段
到目前为止,我已经两次使用下面的代码来获取收入和数量信息
SELECT coalesce(sum(i.qty_ordered), 0) AS qty ,
coalesce(sum(i.row_amount_minus_discount_order), 0)
FROM ol.orders o
LEFT JOIN ol.items i ON i.order_id = o.order_id
LEFT JOIN ol.products p ON p.product_id = i.product_id AND i.store_id = p.store_id
WHERE o.order_state_2 IN('complete','processing')
AND f.product_id=p.product_id
AND o.created_at_order :: DATE BETWEEN f.previous_7_days::DATE AND COALESCE(f.out_of_stock_at::DATE,current_date)
请尽量减少和简化您的代码到最相关的部分!S-Man编辑了代码并添加了更多信息。有什么建议吗?S-Man您有什么建议吗?