我有一个数据库表“ table1”,如下所示:
f_key | begin | counts|
1 | 2018-10-04 | 15 |
1 | 2018-10-06 | 20 |
1 | 2018-10-08 | 34 |
1 | 2018-10-09 | 56 |
我还有另一个数据库表“ table2”,如下所示:
f_key | p_time | percent|
1 | 2018-10-05 | 80 |
1 | 2018-10-07 | 90 |
1 | 2018-10-08 | 70 |
1 | 2018-10-10 | 60 |
表可以通过f_key
字段进行连接。
我想要一个组合表,如下所示:
如果begin
时间早于p_time
中的任何时间,则组合表中的p_time
值将与begin
时间和{{1 }}的值为50。(如下表的第1行所示)
如果percent
时间晚于begin
中的任何时间,则组合表中的p_time
值将是下一个可用的p_time
和{{1 }}值将是所选p_time
的对应值。
(如下表的第2、3和4行所示)
percent
答案 0 :(得分:2)
您可以尝试使用row_number窗口函数生成行号,该行号是距||=== Build: Debug in Yeet (compiler: GNU GCC Compiler) ===|
D:\Coding\addons\lib\x86\SDL2main.lib(Win32\Release\SDL_windows_main.obj):(.text[_OutOfMemory]+0xf)||undefined reference to `SDL_ShowSimpleMessageBox'|
||error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
到table1
的最近的行。
然后使用begin
函数使coalesce
时间早于任何p_time,然后组合表中的p_time值将与begin
时间和{{1 }}的值为50
PostgreSQL 9.6模式设置:
begin
查询1 :
percent
Results :
CREATE TABLE table1(
f_key INT,
begin DATE,
counts INT
);
INSERT INTO table1 VALUES (1,'2018-10-04',15);
INSERT INTO table1 VALUES (1,'2018-10-06',20);
INSERT INTO table1 VALUES (1,'2018-10-08',34);
INSERT INTO table1 VALUES (1,'2018-10-09',56);
CREATE TABLE table2(
f_key INT,
p_time DATE,
percent INT
);
INSERT INTO table2 VALUES (1, '2018-10-05',80);
INSERT INTO table2 VALUES (1, '2018-10-07',90);
INSERT INTO table2 VALUES (1, '2018-10-08',70);
INSERT INTO table2 VALUES (1, '2018-10-10',60);