如何更新ID中最后一次出现的列中的所有值

时间:2019-05-01 12:32:26

标签: sql hive sql-update hiveql

我有下表laundry

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

其中wash1和wash2为dates。 我想将每个商品ID的Wash2日期减少一天,以使最后一次出现的Wash2日期与该ID保持相同。

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

2 个答案:

答案 0 :(得分:1)

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;

答案 1 :(得分:0)

在MYSQL DBMS中,使用以下简单代码:

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

在第一部分中设置您的专栏,例如:

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

此功能在SQL Server中不起作用