2012-11-22 89 views
1

我目前所面对的一个问题,我想更新我的表中的作业称为Service_Log_Temp有重复=“否”,并重复其余最早进入=“是”在SQL中更新最早的记录?

这里是我的表在瞬间:

http://s15.postimage.org/gulifcaiz/Current_Table.jpg

所以我想一个脚本,它着眼于K_B_Job_No(你会看到我在这里列出的2个不同的作业),并更新基于L1_GA_SR_Creation_Date & L2_B_Start_time_Of_Activity与重复='最早进入否“,其余的重复=”是“。

这是它应该如何看:

http://s14.postimage.org/h7zx5xgj5/Desired_Table.jpg

任何想法?

+0

您正在使用哪种数据库系统? – MortenSickel

+0

我可以看到为什么2012-11-08 11:00是重复的,但为什么2012-11-09 08:30重复?为什么2012-11-13 13:58不是重复的? – t3hn00b

+0

前三个工作具有相同的K_B_Job_No 28862103,而最后四个工作有另一个K_B_Job_No(28886103)(我必须仔细看表以查看差异..) – MortenSickel

回答

0

试试这个

select key_service,k_r_job_no,L1_GA_SR_Creation_Date,L2_B_Start_time_Of_Activity, 
    case 
    when (select min(L1_GA_SR_Creation_Date) and min(L2_B_Start_time_Of_Activity) 
     then 'No' 
     else 'Yes' 
    end as Duplicate 
from Service_Log_Temp 
group by k_r_job_no 
0
;with a as (select K_B_Job_No, min(L1_GA_SR_Creation_Date + cast(L2_B_Start_time_Of_Activity as datetime)) as dttime from Service_Log_Temp 
group by K_B_Job_No) 
select key_service,K_B_Job_No,L1_GA_SR_Creation_Date,L2_B_Start_time_Of_Activity, 
(case when 
(select dttime from a where a.K_B_Job_No=b.K_B_Job_No)=(L1_GA_SR_Creation_Date + cast(L2_B_Start_time_Of_Activity as datetime)) 
then 'NO' else 'YES' end) as Duplicate 
from Service_Log_Temp b 
+0

这一个将适用于SQL Server。 – user1603038

0

这应该Postgres里,那里的串联是工作|| - 你必须改变,要无论是在你的系统的串联

背景:要找到每个作业的第一次运行时间:

select k_r_job_no,min(L1_GA_SR_Creation_Date+L2_B_Start_time_Of_Activity) from 
service_log_temp 
group by k_r_job_no 

的问题就是,我们不能从获取的ID了此查询...

但我们可以将其用作子查询。由于通常不可能从子查询中获取多行,所以我们必须进行连接以获得每个作业的正确时间:(您可能需要进行类型转换才能使连接起作用)

select key_service from service_log_temp where 
    k_r_job_no||L1_GA_SR_Creation_Date+L2_B_Start_time_Of_Activity in( 
    select k_r_job_no||min(L1_GA_SR_Creation_Date+L2_B_Start_time_Of_Activity) 
     from service_log_temp 
     group by k_r_job_no 
    ) 

这可以被改写为更新:

update service_log_temp set Duplicate='Yes' where 
    k_r_job_no||L1_GA_SR_Creation_Date+L2_B_Start_time_Of_Activity in( 
    select k_r_job_no||min(L1_GA_SR_Creation_Date+L2_B_Start_time_Of_Activity) 
     from service_log_temp 
     group by k_r_job_no 
    ) 

再后来

update service_log_temp set Duplicate='No' where Duplicate is null 

(如斯利拉姆建议,如果你想拥有它的一个查询,或使用“案例”)