更新时间戳是最新的

时间:2011-01-14 17:14:26

标签: sql postgresql logic conditional-statements

我有一组记录,除了时间戳之外都有相同的数据(是的,不是我的设计)

示例:

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是我的数据库。

3 个答案:

答案 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版本)或函数中执行此操作。