ОБНОВЛЕНИЕ, где отметка времени является последней - PullRequest
3 голосов
/ 14 января 2011

У меня есть группа записей с одинаковыми данными, кроме метки времени (да, не мой дизайн)

Пример:

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 - это моя база данных.

Ответы [ 3 ]

3 голосов
/ 14 января 2011

UPDATE tbl SET user = 'TESTING' <br />WHERE record_id = 1 <br />AND tms_tmp in (select max(tms_tmp) from tbl where record_id = 1)

2 голосов
/ 14 января 2011
UPDATE  mytable
SET     user = 'TESTING'
WHERE   ctid =
        (
        SELECT  ctid
        FROM    mytable
        WHERE   record_id = 1
        ORDER BY
                tmstmp DESC
        LIMIT 1
        )

Это будет правильно обрабатывать дубликаты на tmstmp, если таковые имеются.

0 голосов
/ 14 января 2011

Использование 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) или в функции.

...