sql - 如何将 UPDATE + 数学函数执行到空列中?

标签 sql postgresql math amazon-redshift

我需要对列执行简单的减法并将新值插入到新的 table.column 中。

表的结构是这样的,逻辑不是列,它是我想在数学上做的只是时间而不是日期,删除它也很好,但日期和时间在同一个单元格中粘在一起:

Table A         
    A       Time                      (Logic)
1   aaa   YYYY-MM-DD HH:MM:SS         (row2 - row1)
2   aaa   YYYY-MM-DD HH:MM:SS         (row3-row2)
3   aaa   YYYY-MM-DD HH:MM:SS         (row4-row3)


Table B         
        A         new_time  
    1   aaa       insert logic row 1    
    2   aaa       insert logic row 2    
    3   aaa       insert logic row 3    

问题是如何从下一行中减去 tableA.time 的每一行并将该值更新到 tableB.new_time 中?

-----编辑----

@克林

这是我模仿你的脚本:

update tableB
set new_time = tableA.time
from (
    select tableA.A- lead(tableA.A) over (order by tableB.B) 
    from tableA
    ) tableA.A
where tableB.a = tableA.A

错误信息:

SQL Error [500310] [42P10]: [Amazon](500310) Invalid operation: subquery in FROM may not refer to other relations of same query level;

最佳答案

您可以在 update 中使用子查询作为数据源。示例:

create table table_a (id int primary key, t timestamp);
insert into table_a values
(1, '2016-09-01'), (2, '2016-09-02'), (3, '2016-09-04');

create table table_b (id int primary key, i interval);
insert into table_b values
(1, null), (2, null), (3, null);

update table_b b
set i = a.i
from (
    select id, t - lead(t) over (order by id) i
    from table_a
    ) a
where b.id = a.id;

select * from table_b;

 id |    i    
----+---------
  1 | -1 days
  2 | -2 days
  3 | 
(3 rows)

一个字母的别名很方便,但有时不太清楚。具有更多信息别名的相同查询:

update table_b as alias_b
set i = subquery.i
from (
    select id, t - lead(t) over (order by id) i
    from table_a
    ) as subquery
where alias_b.id = subquery.id;

关于sql - 如何将 UPDATE + 数学函数执行到空列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39778729/

相关文章:

algorithm - 计算数字集的均匀性或差异性的快速方法

sql - where 子句中的字符串连接

php - 选择月日年作为mysql中的日期?

sql - PostgreSQL:使用 psql 命令行实用程序时 Windows 上的编码问题

node.js - Sequelize : delete JSONB property (with PostgreSQL)

mysql - 将 NULL 值插入 postgreSQL 中的 TIMESTAMP 字段

mysql - 删除sql中的表并添加

C# SQL Connection string "can' t 查找表"

带指针的 Objective-C 转换

matlab - 为大 x 计算 4^x mod 2π