在条件下如何选择PostgreSQL中的时间戳值?

时间:2019-02-19 02:17:21

标签: sql postgresql

我有一个数据库表“ 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

1 个答案:

答案 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);