首页 > 解决方案 > 我们可以在 Redshift 中使用 CTE(with 子句)进行 UPDATE 查询吗?

问题描述

我想在我的 Redshift INSET/UPDATE 查询中使用变量作为基准日期,因为这个基准日期应该像往常一样是 current_date-1,但在有任何紧急事项时应该灵活修改。

我可以在 WITH 子句中使用变量,如下所示。我只是想知道我们可以在更新查询中做同样的事情。

INSERT INTO SALES (

 TARGET_DATE
,STORE_CODE
,PRODUCT_CODE
,SALES
)

WITH Variables AS (
SELECT 
  CURRENT_DATE-1::DATE   AS VarOpsDate
  --'2021-03-01'::DATE   AS VarOpsDate
),


SALES_CTE AS (
SELECT 
   SALES_DATE
  ,STORE_CODE
  ,PRODUCT_CODE
  ,SUM(CASE WHEN "CATEGORY"='01' THEN SALES ELSE 0 END) AS SALES01
  ,SUM(CASE WHEN "CATEGORY"<>'01' THEN SALES ELSE 0 END) AS SALES02
FROM
  FACT_SALES
WHERE
  SALES_DATE = (SELECT VarOpsDate FROM Variables)
GROUP BY
   SALES_DATE
  ,STORE_CODE
  ,PRODUCT_CODE
)

SELECT
(SELECT VarOpsDate FROM Variables)
,ST.STORE_CODE
,ST.PRODUCT_CODE
,SALES_CTE.SALES01
,SALES_CTE.SALES02
FROM 
    STORE_PRODUCT_LIST ST

LEFT OUTER JOIN
  SALES_CTE
ON
  ST.STORE_CODE = SALES_CTE.STORE_CODE
AND
  ST.PRODUCT_CODE = SALES_CTE.PRODUCT_CODE;

如果您有任何好的解决方法,请告诉我。谢谢你。

标签: amazon-redshift

解决方案


推荐阅读