Перестановочные значения SQL между столбцами - PullRequest
0 голосов
/ 06 марта 2019

Из-за ошибки при импорте у меня такая странная ситуация.

Предположим, что таблица:

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

Ответы [ 2 ]

5 голосов
/ 06 марта 2019

Примерно так будет работать в TSQL, вы можете использовать его как основу:

UPDATE tbl SET feat1 = feat2, feat2 = feat1 WHERE date >= 'YYYY-MM-DD'
0 голосов
/ 06 марта 2019

Почему бы просто не сделать что-то подобное?

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;
...