Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres中的相关子查询_Postgresql - Fatal编程技术网

Postgresql Postgres中的相关子查询

Postgresql Postgres中的相关子查询,postgresql,Postgresql,我有一个类似下面的查询来查找某些产品的库存详细信息。该查询工作正常,但我认为它不够高效和快速(DB:postgresql版本11) 此代码中有一个CTE“结果集”,我需要查找从缺货日期到缺货日期前7天这段时间内的“订购产品的数量”(从缺货日期算起的数量)。同样,我还需要查找收入 所以我写了两个相同的子查询,一个输出收入,另一个输出数量,这不是一个有效的步骤。所以有人对如何重写它,使它成为一个有效的代码有任何建议 WITH final as ( SELECT p

我有一个类似下面的查询来查找某些产品的库存详细信息。该查询工作正常,但我认为它不够高效和快速(DB:postgresql版本11)

此代码中有一个CTE“结果集”,我需要查找从缺货日期到缺货日期前7天这段时间内的“订购产品的数量”(从缺货日期算起的数量)。同样,我还需要查找收入

所以我写了两个相同的子查询,一个输出收入,另一个输出数量,这不是一个有效的步骤。所以有人对如何重写它,使它成为一个有效的代码有任何建议

     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您有什么建议吗?