1

現在、Service_Log_Temp というテーブル内のジョブの最も古いエントリを重複 = 'No' で更新し、残りを重複 = 'Yes' で更新したいという問題があります。

現時点での私のテーブルは次のとおりです。

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

したがって、K_B_Job_No を調べて (ここに 2 つの異なるジョブがリストされていることがわかります)、L1_GA_SR_Creation_Date と L2_B_Start_time_Of_Activity に基づいて最も古いエントリを Duplicate = 'No' で更新し、残りを Duplicate = 'Yes' で更新するスクリプトが必要です。

これはどのように見えるべきかです:

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

何か案は?

4

3 に答える 3

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

(または、1つのクエリで使用する場合は、SRIRAMが提案する「ケース」を使用します)

于 2012-11-22T10:21:57.737 に答える
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
于 2012-11-22T09:42:24.617 に答える
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
于 2012-11-22T10:10:14.767 に答える