我有 CTE 来根据 NAME、VAL1 和 VAL2 列获取数字,然后按 DT 日期降序排列。
WITH cteA (NAME, VAL1, VAL2, DT) AS
(
SELECT 'A', '7100', 'PN1', '2023-03-01' UNION
SELECT 'A', '7100', 'PN1', '2023-01-01' UNION
SELECT 'A', '7100', 'PN3', '2022-09-01' UNION
SELECT 'A', '7100', 'PN1', '2022-05-20' UNION
SELECT 'A', '7100', 'PN1', '2022-05-09' UNION
SELECT 'A', '7100', 'PN1', '2022-08-20'
),
cteB AS
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY NAME, VAL1, VAL2
ORDER BY DT DESC) ROWNUMBER
FROM cteA
)
SELECT *
FROM cteB
ORDER BY DT DESC
但是当我使用
ROW_NUMBER OVER PARTITION BY NAME, VAL1
时,VAL2 给出的数字不是我想要的:
姓名 | VAL1 | VAL2 | DT | 行号 |
---|---|---|---|---|
A | 7100 | PN1 | 2023-03-01 | 1 |
A | 7100 | PN1 | 2023-01-01 | 2 |
A | 7100 | PN3 | 2022-09-01 | 1 |
A | 7100 | PN1 | 2022-08-20 | 3 |
A | 7100 | PN1 | 2022-05-20 | 4 |
A | 7100 | PN1 | 2022-05-09 | 5 |
我需要用 VAL2 列分隔数字:PN1(PN3 之前)、PN3 本身和 VAL2 上的 PN1(PN3 之后), 保持DT下降, 并得到这样的结果行号:
姓名 | VAL1 | VAL2 | DT | 行号 |
---|---|---|---|---|
A | 7100 | PN1 | 2023-03-01 | 1 |
A | 7100 | PN1 | 2023-01-01 | 1 |
A | 7100 | PN3 | 2022-09-01 | 2 |
A | 7100 | PN1 | 2022-08-20 | 3 |
A | 7100 | PN1 | 2022-05-20 | 3 |
A | 7100 | PN1 | 2022-05-09 | 3 |