【发布时间】:2016-01-30 09:42:28
【问题描述】:
我需要编写一个 Postgres 脚本来遍历我在特定表中的所有行,获取该行中的日期列,找到另一个表中具有该日期的所有行,并将该行的 ID 分配给该行其外键列的第一行。进一步解释,我的数据(简化)如下所示:
first_table:
id INT, run_date DATE
第二张桌子:
id INT, target_date TIMESTAMP, first_table_id INT
伪代码:
first_table_array = SELECT * FROM first_table;
i, val = range first_table_array {
UPDATE second_table SET first_table_id={val.id} WHERE date={val.run_date}
}
但实际上并不是那么简单,因为我将日期与时间戳进行比较(我认为这会导致一些问题?),并且我还需要优化时间段。
因此,我实际上需要检查日期是否从凌晨 4 点开始到第二天凌晨 4 点,而不是执行 where date={val.run_date}。
所以说 run_date 是 01/01/2015,我需要将该值转换为 01/01/2015 04:00:00 的时间戳,然后创建另一个时间戳 01/02/2015 04:00:00 ,然后做:
where date > first_date AND date < second_date.
所以,是这样的:
伪代码:
first_table_array = SELECT * FROM first_table;
i, val = range first_table_array {
first_date = timestamp(val.run_date) + 4 hrs
second_date = timestamp(val.run_date + 1 day) + 4 hrs
UPDATE second_table SET first_table_id={val.id} WHERE date > first_date AND date < second_date
}
postgres 有能力做这种事情,还是我最好写一个脚本来做这件事?我是否需要使用循环,或者我可以仅使用连接和标准 SQL 查询来完成这些工作吗?
【问题讨论】:
-
你能发布一些带有期望输出的真实数据样本吗?你也可以尝试创建一个sqlfiddle.com
标签: sql postgresql