由于导入错误,我有这种奇怪的情况。
假设一张表:
date feat1 feat2
2019-01-01 a z
2019-01-01 a z
2019-01-03 z a
2019-01-04 z a
2019-01-05 z a
从certian日期开始,我们有来自feat1
和feat2
列交换的值。结果我正在寻找
date feat1 feat2
2019-01-01 a z
2019-01-01 a z
2019-01-03 a z
2019-01-04 a z
2019-01-05 a z
如何在不创建临时列的情况下在一个更新语句中修复此问题?我正在使用Vertica DB
这样的东西可以在TSQL中使用,你可以用它作为基础:
UPDATE tbl SET feat1 = feat2, feat2 = feat1 WHERE date >= 'YYYY-MM-DD'
为什么不做这样的事情呢?
update t
set feat1 = t1.feat1,
feat2 = t1.feat2
from (select t.*
from t
order by t.date
limit 1
) t1
where t.feat1 <> t1.feat1 or t1.feat2 <> t1.feat2;
这不需要知道“魔术日期”或特定值。如果值可以是NULL
,您可能希望将其与比较逻辑一起考虑。
如果你只是想要一个select
查询,first_value()
会做你想要的:
select t.date,
first_value(t.feat1) over (order by t.date) as feat1,
first_value(t.feat2) over (order by t.date) as feat1
from t;