【问题标题】:Sql Synapse How to update the latest recordsSql Synapse 如何更新最新记录
【发布时间】:2021-12-20 14:20:12
【问题描述】:

映射

| ID | CUST_ID | MEMID | CRE_DT | UPD_DT
----------------------------------------
| 1  | AA21    |  NULL |20210101|20210101
| 2  | AA21    | MID01 |20210202|20210202
| 3  | AA50    | MID00 |20210101|20210101

MASTER

| ID | CUST_ID | NEW_MEMID
| 2  | AA21    | NW01
| 3  | AA50    | NW02

更新后的输出

映射

| ID | CUST_ID | MEMID | CRE_DT | UPD_DT
----------------------------------------
| 1  | AA21    |  NULL |20210101|20210101
| 2  | AA21    | NW01  |20210202|20210202
| 3  | AA50    | NW02  |20210101|20210101

我在 Mapping 中更新数据时遇到问题,我只想更新最新记录。

注意:1 CUST_ID : M ID 因此我需要按 cust_id order by upd_dt DESC,ID ASC 进行分区以获取最新记录。

我只想更新行

ID = 2 CUST_ID = AA21
ID = 3 CUST_ID = AA50


UPDATE MAPPING
SET MEMID = NEW_MEMID
FROM
    (SELECT DISTINCT 
         ID, CUST_ID, NEW_MEMID
     FROM MASTER) SRC
WHERE (SRC.ID, SRC.CUST_ID) IN 
     (SELECT ID, CUST_ID
      FROM 
          (SELECT 
               DISTINCT ID, CUST_ID,
               ROW_NUMBER() OVER (PARTITION BY CUST_ID ORDER BY COALESCE(UPDATED_DATE, CREATED_DATE) DESC, ID ASC) RN
           FROM MAPPING) LASTEST
      WHERE RN = 1)

在第 33 行,第 42 列解析错误:',' 附近的语法不正确。

这是WHERE (SRC.ID,SRC.CUST_ID) IN

【问题讨论】:

  • 对不起,我已经编辑过了。

标签: sql sql-update azure-synapse


【解决方案1】:

假设 Azure Synapse 兼容 T-SQL,您可以在此处使用可更新的 CTE:

WITH cte AS (
    SELECT mp.MEMID, ms.NEW_MEMID,
           ROW_NUMBER() OVER (PARTITION BY mp.CUST_ID
                              ORDER BY COALESCE(mp.UPD_DT, mp.CRE_DT)) rn
    FROM MAPPING mp
    INNER JOIN MASTER ms ON ms.CUST_ID = mp.CUST_ID
)

UPDATE cte
SET MEMID = NEW_MEMID
WHERE rn = 1;

【讨论】:

  • 这解决了,谢谢
猜你喜欢
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多