Как обновить все значения в столбце, кроме последнего вхождения для идентификатора - PullRequest
0 голосов
/ 01 мая 2019

У меня есть следующая таблица laundry:

item | wash1 | wash2
abc1 | A     | B
abc1 | B     | C
abc1 | C     | D
abc2 | A     | E
abc2 | E     | F

, где wash1 и wash2 равны dates.Я хочу уменьшить дату стирки2 на один день для каждого идентификатора элемента, чтобы дата стирки для последнего вхождения оставалась неизменной для этого идентификатора.

item | wash1 | wash2
abc1 | A     | B-1
abc1 | B     | C-1
abc1 | C     | D
abc2 | A     | E-1
abc2 | E     | F

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

Решение для Hive:

insert overwrite table laundry
select 
     item, wash1, 
     case when rn=1 then wash2
          else date_sub(wash2,1) 
      end wash2
from
(
select item, wash1, wash2,
       row_number() over(partition by item order by wash2 desc) rn  --latest=1 
  from laundry
)s;
0 голосов
/ 01 мая 2019

В СУБД MYSQL используйте следующий простой код:

SELECT DATE_SUB("2017-06-15", INTERVAL 1 DAY);  

Установите свой столбец в первой части, например:

SELECT DATE_SUB(wash2, INTERVAL 1 DAY) 
from laundry
Where wash2 <> MAX(wash2); 

Эта функция не работает на сервере SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...