Postgres 9.3:除了其他选择标准之外,如何更新具有时间戳最大值的行?

Faw*_*awn 4 postgresql

我想允许用户取消定期订阅。考虑到我拥有的其他基础设施,最简单的方法是recurring为用户的最新约会(日期)设置字段 = 0。所以我只需要recurring在匹配特定用户的最新约会的行中更新字段的值。

这是我尝试过的:

UPDATE appointments SET recurring = 0 WHERE id = 433 AND time = max(time);


ERROR:  aggregate functions are not allowed in WHERE
LINE 1: ...ments set recurring = 0 where id = 433 and time = MAX(time);
Run Code Online (Sandbox Code Playgroud)

 UPDATE appointments SET recurring = 0 WHERE id = 433 AND time = SELECT MAX(time) FROM appointments WHERE id = 433;
Run Code Online (Sandbox Code Playgroud)

这是约会表的相关部分:

                                           Table "public.appointments"
      Column      |            Type             |                           Modifiers
------------------+-----------------------------+----------------------------------------------------------------
 id               | integer                     |
 time             | timestamp with time zone    |
 recurring        | integer                     |
Run Code Online (Sandbox Code Playgroud)

我应该从这里去哪里?是否有必要将其分为两部分调用?

Phi*_*lᵀᴹ 5

UPDATE appointments SET recurring = 0 
WHERE id = 433 
AND time = (select max(time) from appointments where id = 433);
Run Code Online (Sandbox Code Playgroud)

……是答案。你只需要括号。