根据订单更新

时间:2017-03-27 18:02:01

标签: sql teradata

是否可以根据列中定义的优先级更新数据。 我输入了这样的数据

///

我们必须在我们的数据中维护SC2,并且必须将最新日期(i,e 23-02-2013 here)的数据保存在我们的数据库中。 我们将每天获取文件,但在某些情况下,我们可以获取包含2天组合数据的文件。现在我必须确保维护所有历史记录并将最新日期的数据保持为活动状态。

我的目标数据看起来像

id  Start_date   active_flag
1   21-03-2013   N
1   23-03-2013   N
1   22-02-2013   N
1   20-02-2013   N

但是如何根据Start_date的顺序编写可以更新列id数据的更新。

提前致谢

1 个答案:

答案 0 :(得分:0)

CREATE TABLE #tst(id int,start_data datetime,active_flage varchar(2))
insert into #tst
SELECT 1,'2013-03-21','' UNION
SELECT 1,'2013-03-23','' UNION
SELECT 1,'2013-03-20','' UNION
SELECT 1,'2013-03-19','' UNION
SELECT 1,'2013-03-18','' 

UPDATE #tst set active_flage=CASE when r_Id=1 then 'Y' ELSE 'N' END
FROM #tst a JOIN 
(SELECT ROW_NUMBER() over(PARTITION by id order by start_data desc) as r_Id,* from #tst)b
ON a.Id=b.Id AND a.start_data=b.start_data

select * from #tst

考虑到相同ID不会有重复日期