我想根据updated_timestamp获得刚刚插入/修改的记录。
我有DB2
数据库的以下场景:
insert
或update
查询。该表包含updated_timestamp字段,用于捕获插入或更新的时间。select
查询获取我之前插入/更新的记录。示例
insert into table_name(x,y,CURRENT TIMESTAMP);
希望使用select
作为
select * from table_name where updated_timestamp > ?
我应该用什么值替换?
,上面的查询应该返回我最新插入的记录x,y,<time_stamp>
答案 0 :(得分:0)
If I understand what your asking, couldn't you use a subquery pulling the max(updated_timestamp) and other values from the table and use that to filter to only the most recently updated records for each one?
Something like this:
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
答案 1 :(得分:0)
如果您的db2版本作为此选项,您可以像这样使用最终表
SELECT updated_timestamp
FROM FINAL TABLE (INSERT INTO table_name (X, X, updated_timestamp )
VALUES(valueforX, valueforY, CURRENT TIMESTAMP));
您也可以使用变量:
CREATE OR REPLACE VARIABLE YOURLIB.MYTIMESTAMP TIMESTAMP DEFAULT CURRENT TIMESTAMP;
INSERT INTO table_name (X, X, updated_timestamp )
VALUES(valueforX, valueforY, YOURLIB.MYTIMESTAMP));
但最好的解决方案是使用主键更新您的表格,然后使用主键获取时间戳。
建议,您使用触发器更新上次时间戳。也许可以像这样使用autotimestamp:
CREATE TABLE table_name
(
X VARCHAR(36),
Y VARCHAR(36),
CHANGE_TS TIMESTAMP FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL
)