问题描述
我想得到 result01。
这是示例表。
CREATE TABLE temp01
(
SEQ int,cat01 numeric(6,0),cat02 numeric(6,dt_day date,dt_week date,dt_month date,price decimal(10,0)
)
INSERT INTO temp01 VALUES (1,230,1,'2019-01-01','2019-01-05','2019-01-31',16000)
INSERT INTO temp01 VALUES (2,'2019-01-02',NULL)
INSERT INTO temp01 VALUES (3,'2019-01-03',13000)
INSERT INTO temp01 VALUES (4,'2019-01-04',NULL)
INSERT INTO temp01 VALUES (5,'2019-01-12',NULL)
INSERT INTO temp01 VALUES (6,'2019-01-06',NULL)
INSERT INTO temp01 VALUES (7,'2019-01-07',19000)
INSERT INTO temp01 VALUES (1,2,NULL)
INSERT INTO temp01 VALUES (2,12000)
INSERT INTO temp01 VALUES (4,17000)
INSERT INTO temp01 VALUES (5,22000)
INSERT INTO temp01 VALUES (6,' 2019-01-06',' 2019-01-07',21000)
我想从 temp01 获取这张表。
[result01]
| SEQ | cat01 | cat02 | dt_day | price | sub_seq |
| --- | ----- | ----- | ---------- | ----- | ------- |
| 1 | 230 | 1 | 2019-01-01 | 16000 | 1 |
| 3 | 230 | 1 | 2019-01-03 | 13000 | 2 |
| 7 | 230 | 1 | 2019-01-07 | 19000 | 3 |
| 3 | 230 | 2 | 2019-01-03 | 12000 | 1 |
| 4 | 230 | 2 | 2019-01-04 | 17000 | 2 |
| 5 | 230 | 2 | 2019-01-05 | 22000 | 3 |
| 7 | 230 | 2 | 2019-01-07 | 21000 | 4 |
....
WITH ROW_VALUE AS
(
SELECT SEQ,dt_day,cat01,cat02,price,ROW_NUMBER() OVER (ORDER BY cat01,dt_day) AS sub_seq
FROM (
SELECT SEQ,dt_week,dt_month,price
FROM temp01
WHERE price IS NOT NULL
)val
)
SELECT disTINCT *
FROM ROW_VALUE
ORDER BY cat01,dt_day
如何获得 result01 表?
请检查我的代码。
解决方法
你应该PARTITION BY cat01,cat02
和ORDER BY dt_day
:
SELECT SEQ,cat01,cat02,dt_day,dt_week,dt_month,price,ROW_NUMBER() OVER (PARTITION BY cat01,cat02 ORDER BY dt_day) AS sub_seq
FROM temp01
WHERE price IS NOT NULL
参见demo。
结果:
序列 | cat01 | cat02 | dt_day | dt_week | dt_month | 价格 | sub_seq |
---|---|---|---|---|---|---|---|
1 | 230 | 1 | 2019-01-01 | 2019-01-05 | 2019-01-31 | 16000 | 1 |
3 | 230 | 1 | 2019-01-03 | 2019-01-05 | 2019-01-31 | 13000 | 2 |
7 | 230 | 1 | 2019-01-07 | 2019-01-12 | 2019-01-31 | 19000 | 3 |
3 | 230 | 2 | 2019-01-03 | 2019-01-12 | 2019-01-31 | 12000 | 1 |
4 | 230 | 2 | 2019-01-04 | 2019-01-12 | 2019-01-31 | 17000 | 2 |
5 | 230 | 2 | 2019-01-05 | 2019-01-12 | 2019-01-31 | 22000 | 3 |
7 | 230 | 2 | 2019-01-07 | 2019-01-12 | 2019-01-31 | 21000 | 4 |