2012-11-22 6 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에 따라 초기 항목을 업데이트 No '이고 나머지는 Duplicate ='Yes '입니다.

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

이는 연결이 포스트 그레스에서 작동합니다 시도 ||

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 

이 (스리 람 제안 당신이 한 쿼리에서 그것을 가지고 싶은 경우 나, "경우"를 사용)

관련 문제