2016-10-20 92 views
0

我想根據updated_timestamp獲取剛插入/修改的記錄。根據updated_timestamp獲取剛剛插入/修改的記錄

我有以下情形爲DB2數據庫:

  1. 觸發insertupdate查詢數據庫。該表包含updated_timestamp字段,用於捕獲插入或更新的時間。
  2. 想要僅使用select查詢來獲取我以前插入的/更新的記錄。

insert into table_name(x,y,CURRENT TIMESTAMP); 

想使用select上方插入記錄作爲

有什麼價值,我應該更換?,上面的查詢應該返回我最新插入的記錄as x,y,<time_stamp>

+0

試圖獲取x,y最近插入的記錄? –

回答

0

如果我明白你的要求,是否可以使用子查詢從表中抽取max(updated_timestamp)和其他值,並使用它來過濾每個記錄的最近更新記錄?

事情是這樣的:

insert into table_name (x, y, timestamp) 
Select table_name.x, table_name.y, DateTime() 
from table_name join (select x, y, Max(updated_timestamp) 
updated_timestamp from table_name) table_name2 
on table_name.x = table_name2.x and table_name.y = tablename2.y 
and table_name.updated_timestamp = table_name2.updated_timestamp 
0

如果DB2版本,此選項可以使用最後的表像這樣

SELECT updated_timestamp 
FROM FINAL TABLE (INSERT INTO table_name (X, X, updated_timestamp) 
       VALUES(valueforX, valueforY, CURRENT TIMESTAMP)); 

IBM Doc

你可以使用一個變量太多:

CREATE OR REPLACE VARIABLE YOURLIB.MYTIMESTAMP TIMESTAMP DEFAULT CURRENT TIMESTAMP; 
INSERT INTO table_name (X, X, updated_timestamp) 
VALUES(valueforX, valueforY, YOURLIB.MYTIMESTAMP)); 

但最好的解決方案是用你的主鍵更新你的表格,然後用你的主鍵獲得你的時間戳。

建議您使用觸發器更新上次的時間戳。也許你可以使用像這樣的自動測試郵票:

CREATE TABLE table_name 
(
X VARCHAR(36), 
Y VARCHAR(36), 
CHANGE_TS TIMESTAMP FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL 
) 
相關問題