繁体   English   中英

替换 IBM DB2 SQL 中每个 ID 和每个月的值?

[英]Replace values for each ID and each month in IBM DB2 SQL?

我在 IBM DB2 中有大约几百万条记录表,有 4 列:是、月、个人编号(2 百万)、个人 ID。 关键是我想从这张表中获取同一张表,但我想填写上个月(之前所有月份)的personal_id列值。 要点是获得 1-1:1 个person_id 与 1 个person_number 相关。

这是我的代码,但错误是现在我所有月份都有 4 个(我需要 1,2,3,4 几个月)

    With CTE As
(
    SELECT  
            a.YEAR,
            a.MONTH, 
            a.PERSONAL_NUMBER, 
            a.PERSONAL_ID, 
            
            Row_Number() Over (Partition By a.YEAR, a.PERSONAL_NUMBER
                                     Order By a.MONTH DESC) Rn
    FROM
    DWH.PA A
    )
SELECT 
D.YEAR, D.MONTH, D.PERSONAL_NUMBER, D.PERSONAL_ID
FROM CTE D
RIGHT JOIN
(
SELECT
YEAR,
MONTH,
PERSONAL_NUMBER
FROM
DWH.PA
) B
ON (D.PERSONAL_NUMBER = B.PERSONAL_NUMBER)
WHERE D.Rn = 1 
;

这是起始表:

私人电话号码 个人身份证件
2020 1 AA 8
2020 2 AA 5
2020 3 AA 5
2020 4 AA 1
2020 1 BB 2
2020 2 BB 2
2020 3 BB 3
2020 4 BB 3

这是结果(结果不是很好):

私人电话号码 个人身份证件
2020 4 AA 1
2020 4 AA 1
2020 4 AA 1
2020 4 AA 1
2020 4 BB 3
2020 4 BB 3
2020 4 BB 3
2020 4 BB 3

这是我需要的:

私人电话号码 个人身份证件
2020 1 AA 1
2020 2 AA 1
2020 3 AA 1
2020 4 AA 1
2020 1 BB 3
2020 2 BB 3
2020 3 BB 3
2020 4 BB 3

非常感谢

我不确定我是否正确理解了您想要的内容,但请尝试以下操作:

SELECT
  YEAR,
  MONTH,
  PERSONAL_NUMBER,
  (
    SELECT PERSONAL_ID
    FROM DWH.PA AS B 
    WHERE A.YEAR = B.YEAR
    AND A.PERSONAL_NUMBER = B.PERSONAL_NUMBER
    ORDER BY MONTH DESC
    FETCH FIRST 1 ROW ONLY
   ) AS PERSONAL_ID
 FROM DWH.PA AS A

尝试这个:

WITH T (YEAR, MONTH, PERSONAL_NUMBER, PERSONAL_ID) AS
(
VALUES
  (2020, 1, 'AA', 8)
, (2020, 2, 'AA', 5)
, (2020, 3, 'AA', 5)
, (2020, 4, 'AA', 1)
, (2020, 1, 'BB', 2)
, (2020, 2, 'BB', 2)
, (2020, 3, 'BB', 3)
, (2020, 4, 'BB', 3)
)
SELECT 
  T.*
, FIRST_VALUE(PERSONAL_ID) OVER 
  (PARTITION BY YEAR, PERSONAL_NUMBER ORDER BY MONTH DESC) PERSONAL_ID_NEW
FROM T;

结果是:

|YEAR|MONTH|PERSONAL_NUMBER|PERSONAL_ID|PERSONAL_ID_NEW|
|----|-----|---------------|-----------|---------------|
|2020|4    |AA             |1          |1              |
|2020|3    |AA             |5          |1              |
|2020|2    |AA             |5          |1              |
|2020|1    |AA             |8          |1              |
|2020|4    |BB             |3          |3              |
|2020|3    |BB             |3          |3              |
|2020|2    |BB             |2          |3              |
|2020|1    |BB             |2          |3              |

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM