表1:
client report_date date_of_analysis
554 30.12.2013 15.01.2014
554 30.12.2013 25.01.2014
554 30.12.2012 15.01.2013
554 30.12.2012 28.01.2013
554 30.12.2011 15.01.2012
556 30.12.2013 15.01.2014
556 30.12.2012 15.01.2013
556 30.12.2011 15.01.2012
556 30.12.2011 05.01.2012
当有两份报告并且分析日期较旧时,我想用前面的x更新客户编号。
在这种情况下,它应该用分析日期15.01.2014更新一个客户端554。报告日期为2013年12月30日。现在应该是'x554'。
我试过了:
update table1
set client= 'x'+client
where date_of_analysis<max(date_of_analysis)
但这不起作用
结果将是:
client report_date date_of_analysis
X554 30.12.2013 15.01.2014
554 30.12.2013 25.01.2014
X554 30.12.2012 15.01.2013
554 30.12.2012 28.01.2013
554 30.12.2011 15.01.2012
556 30.12.2013 15.01.2014
556 30.12.2012 15.01.2013
556 30.12.2011 15.01.2012
X556 30.12.2011 05.01.2012
答案 0 :(得分:5)
假设date_of_analysis是日期时间或日期
;with x as
(
select client, date_of_analysis,
row_number() over (partition by client, report_date
order by date_of_analysis desc) rn
from <table>
where client not like 'x%'
)
update x
set client = 'x' + client
where rn > 1
答案 1 :(得分:4)
最简单的解决方案是:
update t1
set client= 'x'+client
FROM table1 t1
where EXISTS
(SELECT 1
FROM Table1
WHERE Client = t1.Client
AND date_of_analysis > t1.date_of_analysis
AND report_date = t1.report_date)
AND LEFT(Client, 1) <> 'x'
这将在同一客户端有更新记录的行上的任何客户端名称中添加X.