由于导入错误,我有这种奇怪的情况。
假设一个表:
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
从更新日期开始,我们交换了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
答案 0 :(得分:5)
类似的事情在TSQL中可行,您可以将其用作基础:
UPDATE tbl SET feat1 = feat2, feat2 = feat1 WHERE date >= 'YYYY-MM-DD'
答案 1 :(得分:0)
为什么不只是做这样的事情?
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;