我正在尝试基于col2中的值更新col3。但我希望此更新特定于col1(预订参考)中的唯一标识符。
我有过去一年的历史数据。每个预订参考每月更新一次,因此表中每个唯一的预订参考都有12个值。
我正在尝试将col3设置为显示与该预订参考关联的绝对最小日期。因此,在一个预订参考的12条记录中,如果最早的开始日期是12/03/2018,则它将与该预订参考相关的所有行的该日期都放在col3中。
我对stackoverflow和postgres文档都有很好的了解。我知道应该以聚合函数的形式完成此操作,但是我找不到有效的解决方案。
UPDATE table1
SET "col3" = (SELECT MIN("col2")
FROM table1)
上面的代码遵循我认为应该起作用的逻辑,但是,它使用绝对最早的日期来更新所有行,而不管与之相关的预订参考(col1)。
我知道可以使用GROUP BY来解决此问题,但是我不知道如何正确包含它。
答案 0 :(得分:1)
您并没有真正向我们展示表的结构(使用混淆的名称会使我们更难以理解),但这听起来好像您需要一个相关的子查询
update the_table
set col3 = (select min(col2)
from the_table t2
where t2.col1 = the_table.col1);
一种可能更快的解决方案是进行一次聚合,并将结果用于更新:
update the_table
set col3 = t.min_col2
from (
select t2.col1, min(t2.col2) as min_col2
from the_table t2
group by t2.col1
) s
where s.col1 = the_table.col1;