2012-11-22 87 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 

(如斯利拉姆建議,如果你想擁有它的一個查詢,或使用「案例」)