我有一组记录,除了时间戳之外都有相同的数据(是的,不是我的设计)
示例:
record_id, user, tmstmp
1, myself, 2006-11-15 09:56:14.325882-05
1, myself, 2006-11-15 09:56:19.051823-05
1, myself, 2006-11-15 11:23:30.581366-05
etc...
现在我想用最新的时间戳更新记录。这是我正在尝试的没有运气:
UPDATE tbl
SET user = 'TESTING'
WHERE record_id = 1
ORDER BY tmstmp DESC
LIMIT 1
ORDER BY会抛出语法错误。
我认为它应该是一个AND条件,但不会看到如何。有什么想法吗?
PostgreSQL是我的数据库。
答案 0 :(得分:3)
UPDATE tbl
SET user = 'TESTING'
WHERE record_id = 1
AND tms_tmp in
(select max(tms_tmp) from tbl where record_id = 1)
答案 1 :(得分:2)
UPDATE mytable
SET user = 'TESTING'
WHERE ctid =
(
SELECT ctid
FROM mytable
WHERE record_id = 1
ORDER BY
tmstmp DESC
LIMIT 1
)
这将正确处理tmstmp
上的重复项(如果有)。
答案 2 :(得分:0)
使用PL / pgsql:
DECLARE
cur CURSOR(key int) FOR
SELECT * FROM tbl WHERE tbl.record_id = key ORDER BY tmstmp DESC FOR UPDATE;
BEGIN
OPEN cur(1); -- record_id
MOVE NEXT FROM cur;
UPDATE tbl SET "user" = 'TESTING' WHERE CURRENT OF cur;
CLOSE cur;
END
您可以在DO块(从9.0版本)或函数中执行此操作。