我的 UPDATE 语句哪里不存在有什么问题?

What is wrong with my UPDATE statement WHERE NOT EXISTS?

我想要完成的是将 ISCURRENT 字段更新为 'N' 并将 EFFECTIVE_END_DATE 字段更新为当前日期,如果其类型的记录没有最多最近 EFFECTIVE_START_DATE.
不会抛出错误,它只是告诉我“受影响的 0 行”,但我创建了一个具有较新 EFFECTIVE_START_DATE 的记录,该记录应该会影响 table 中具有较早 EFFECTIVE_START_DATE 的另一条记录].
这是我用来测试它的 2 条记录的图像。

KTEXT 为“400 Atlantic”的记录应从此脚本更改为具有 ISCURRENT ='N'EFFECTIVE_END_DATE=GETDATE(),因为带有 KTEXT 的记录500 Maria 有一个更新的 EFFECTIVE_START_DATE

UPDATE [SAP].[src_gl_sap_m_cepct]
set    ISCURRENT='N', 
       EFFECTIVE_END_DATE=GETDATE()
WHERE NOT EXISTS (SELECT [SPRAS],
                         [PRCTR],
                         MAX(EFFECTIVE_START_DATE) 
                  FROM  [SAP].[src_gl_sap_m_cepct] AS A 
                  WHERE CONCAT([SAP].[src_gl_sap_m_cepct].[SPRAS],[SAP].[src_gl_sap_m_cepct].[PRCTR]) = CONCAT(A.[SPRAS],A.[PRCTR]
                 )
 GROUP BY [SPRAS],[PRCTR]);

谢谢!

如果我错了请纠正我,但这部分查询

FROM  [SAP].[src_gl_sap_m_cepct] AS A 
WHERE CONCAT([SAP].[src_gl_sap_m_cepct].[SPRAS],[SAP].[src_gl_sap_m_cepct].[PRCTR]) = CONCAT(A.[SPRAS],A.[PRCTR]

也可以这样写(因为你有self join)

FROM  [SAP].[src_gl_sap_m_cepct] AS A 
WHERE CONCAT(A.[SPRAS], A.[PRCTR]) = CONCAT(A.[SPRAS], A.[PRCTR]

像这样我注意到您只是再次将一个值与相同的值进行比较。
因此,这将始终评估为 TRUE
因此 not exists 子句永远不会评估为 true
因此不会发生任何更新。

我认为这样的东西可能适合你

UPDATE c
set    c.ISCURRENT='N', 
       c.EFFECTIVE_END_DATE = GETDATE()
FROM   SAP.src_gl_sap_m_cepct c
WHERE  EXISTS ( select 1
                FROM   SAP.src_gl_sap_m_cepct AS A
                WHERE  CONCAT(c.SPRAS, c.PRCTR) = CONCAT(A.SPRAS, A.PRCTR)
                AND    A.EFFECTIVE_START_DATE > c.EFFECTIVE_START_DATE
              )

如果我没理解错的话,语句应该是这样的:

UPDATE c
set    ISCURRENT='N', 
       EFFECTIVE_END_DATE = GETDATE()
FROM [SAP].[src_gl_sap_m_cepct] c
WHERE EXISTS (
        SELECT 1 
        FROM  [SAP].[src_gl_sap_m_cepct] AS A 
        WHERE CONCAT(c.[SPRAS], c.[PRCTR]) = CONCAT(A.[SPRAS],A.[PRCTR])
            AND c.EFFECTIVE_START_DATE < A.EFFECTIVE_START_DATE 
);