【发布时间】:2020-12-23 09:03:49
【问题描述】:
我有一个表格,其中包含 Age、Period 和 Year 列。 Age 列始终以 0 开头,并且没有固定的最大值(在此示例中我使用 'Age' 0 到 30,但范围也可以是 0 到 100 等),值 Period 和 @ 987654326@ 只出现在特定年龄的特定行中。
然而,在Age 出现Period 和Year 的值时,会发生变化,因此解决方案应该是动态的。用正确的Period 和Year 填写NULL 值的最佳方法是什么?
我正在使用 SQL Server。
Age Period Year
-----------------
0 NULL NULL
1 NULL NULL
2 NULL NULL
3 NULL NULL
4 NULL NULL
5 NULL NULL
6 NULL NULL
7 NULL NULL
8 NULL NULL
9 NULL NULL
10 NULL NULL
11 NULL NULL
12 NULL NULL
13 NULL NULL
14 NULL NULL
15 NULL NULL
16 NULL NULL
17 NULL NULL
18 NULL NULL
19 NULL NULL
20 NULL NULL
21 46 2065
22 NULL NULL
23 NULL NULL
24 NULL NULL
25 NULL NULL
26 51 2070
27 NULL NULL
28 NULL NULL
29 NULL NULL
30 NULL NULL
结果应如下所示,Period 和 Year 的数字应比 Period 和 Year 的最后已知值增加和/或减少。
Age Period Year
-----------------
0 25 2044
1 26 2045
2 27 2046
3 28 2047
4 29 2048
5 30 2049
6 31 2050
7 32 2051
8 33 2052
9 34 2053
10 35 2054
11 36 2055
12 37 2056
13 38 2057
14 39 2058
15 40 2059
16 41 2060
17 42 2061
18 43 2062
19 44 2063
20 45 2064
21 46 2065
22 47 2066
23 48 2067
24 49 2068
25 50 2069
26 51 2070
27 52 2071
28 53 2072
29 54 2073
30 55 2074
这是我的问题的更新,因为我没有详细说明我的要求:
该解决方案应该能够处理Age、Period 和Year 的不同组合。我的起点将始终是已知的Age、Period 和Year 组合。但是,在我的示例中,Age = 21、Period = 46 和 Year = 2065(或 26|51|2070 作为第二种组合)的组合不是静态的。 Age = 21 的值可以是任何值,例如Period = 2 和 Year = 2021。无论组合(Age、Period、Year)是什么,解决方案都应该填补空白并完成从已知值向上和向下计数的序列Period 和 Year。如果Period 值序列变为负数,则解决方案应尽可能返回NULL 值。
【问题讨论】:
-
你的问题不是很清楚,你有什么逻辑来填时期和年份吗?
-
感谢您的评论,是的,序列只是 +/-1 年和期间。我编辑了问题,添加了所需结果的示例
标签: sql sql-server datetime window-functions gaps-and-islands