2016-09-29 16 views
0

我需要在列上執行簡單的減法並將新值插入到新的table.column中。如何在空列中執行UPDATE +數學函數?

該表的結構是這樣的,邏輯不是一個列,它是我想要做的數學只是時間而不是日期,放棄它也很好,但日期和時間是在同一個單元格粘在一起:

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  

的問題是如何從下一行並更新到價值減去tableB.new_time每一行tableA.time?

-----編輯----

@klin

,這是我的腳本後,你的模仿:

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; 
+0

沒有row0,你想從row1中減去什麼?更重要的是,時間戳之間的差異是一個時間間隔。你打算如何將該間隔存儲在先前保存時間戳的同一列中? – redneb

+0

@a_horse_with_no_name SELECT語句只是我亂搞,因此我說它是在紙上,我來自MySql的背景,所以試圖映射出來。 – RustyShackleford

+0

@redneb我的道歉應該從第1行開始,我會更新。我不需要將它存儲在同一列我需要更新tableB.new_time與tableA.time的時間差異 希望這可以幫助 – RustyShackleford

回答

3

您可以在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; 
+0

我一直在嘗試使用UPDATE語句,但我對錶格的所有額外名稱感到困惑。我用你的腳本和我得到的錯誤信息模仿了我的腳本。 – RustyShackleford

+0

謝謝你的清理,如果你能幫到,我還有其他問題。你的查詢工作正常,但由於日期和時間包含在同一個單元格中,有沒有什麼辦法可以首先將日期分割出來,並且只是在時間上進行計算? – RustyShackleford

+1

您可以將時間戳記轉換爲時間,例如'選擇'2016-10-01 12:12:12'::時間'產生''12:12:12''(備選符號'選擇時間'2016-10-01 12:12:12'')。 – klin

相關問題