如何将分区计算结果写入现有RECENT列而非新增列
解决方案
场景1:仅查询返回替换后结果(不修改原表)
不要使用SELECT *(它会包含原有RECENT列),需要显式列出所有列,并用计算结果覆盖RECENT的取值:
SELECT ID, ORDER, AGE, (ORDER = MAX(ORDER) OVER (PARTITION BY ID)) AS RECENT FROM MY_TABLE
这里的(ORDER = MAX(ORDER) OVER (PARTITION BY ID))会返回布尔值:当当前行的ORDER等于该ID分组下的最大ORDER时为TRUE,否则为FALSE,直接替换原有RECENT列的输出值。
场景2:直接更新原表的RECENT列值
如果需要永久修改表中RECENT列的数据,可以用CTE(公共表表达式)先计算每个ID的最大ORDER,再关联更新:
WITH MaxOrderPerID AS ( SELECT ID, MAX(ORDER) AS MaxOrder FROM MY_TABLE GROUP BY ID ) UPDATE t SET RECENT = (t.ORDER = mo.MaxOrder) FROM MY_TABLE t INNER JOIN MaxOrderPerID mo ON t.ID = mo.ID
内容的提问来源于stack exchange,提问作者Angie
相关产品推荐
相关产品推荐

