Sql 更新时间戳为最新的位置

Sql 更新时间戳为最新的位置,sql,postgresql,logic,conditional-statements,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 = 'TE

我有一组记录,除了时间戳,所有数据都是一样的是的,不是我的设计

例如:

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抛出语法错误

我认为这应该是一种健康状况,但不知道如何。有什么想法吗

PostgreSQL是我的数据库。

更新tbl 设置用户='测试' 其中记录_id=1 和tms_tmp 从tbl中选择maxtms_tmp,其中记录id=1

这将正确处理tmstmp上的重复项(如果有)。

使用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

您可以在9.0版的do块或函数中执行此操作。

谢谢,忘记了嵌套选择,请注意,当有多行具有相同时间戳值时,这将删除多行,例如,在一个事务中有多个now调用。此外,还应使用=相等,而不是IN运算符。重要的是你要告诉人们你的解决方案可能存在的任何警告。我真是太傻了。我删除了我的答案。
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