私の目標は、クエリを作成してから、CI フィールドを「1」に更新する update ステートメントを作成することですが、max(vt_end) が sysdate よりも小さく、max( vt_end ) に対して更新されたレコードがまだない場合にのみです。その特定のコードの 31-dec-9999 の。以下に基本的なクエリを示しますが、更新するレコードだけを特定する方法がわかりません。
SELECT CODE,
MAX (VT_END),
TT_STOP,
MOST_RECENT_IND AS MRI,
CURRENT_IND AS CI
FROM TABLE
WHERE TT_STOP > SYSDATE AND CODE IN ('0001F', '0001M', '0001T')
GROUP BY CODE,
VT_END,
MOST_RECENT_IND,
CURRENT_IND
ORDER BY CODE, VT_END
CODE VT_END TT_STOP MRI CI
0001F 12/31/2004 12/31/9999 0 0
0001F 12/31/2006 12/31/9999 0 0
0001F 3/31/2007 12/31/9999 0 0
0001F 12/31/2007 12/31/9999 0 0
0001F 12/31/2011 12/31/9999 0 0
0001F 12/31/2012 12/31/9999 0 0
0001F 12/31/9999 12/31/9999 1 1
0001T 12/31/2003 12/31/9999 0 0
0001T 12/31/2004 12/31/9999 0 0
私もこのクエリを試しましたが、「31-dec-9999」のレコードが既にあるため、0001F 12/31/2012 のレコードが返されるため、間違っています。
SELECT CODE,
MAX (VT_END),
MOST_RECENT_IND AS MRI,
CURRENT_IND AS CI
FROM SRC_PROCDR_DESCRIPTOR_SCD2
WHERE TT_STOP > SYSDATE AND CODE IN ('0001F', '0001M', '0001T')
AND VT_END <> '31-dec-9999'
GROUP BY CODE,
MOST_RECENT_IND,
CURRENT_IND
ORDER BY CODE
Incorrect Results:
CODE VT_END TT_STOP MRI CI
0001F 12/31/2012 0 0
0001T 12/31/2004 0 0
結果は
CODE VT_END TT_STOP MRI CI
0001T 12/31/2004 12/31/9999 0 0 - Update to '1' on CI
--This should be the only record returned in the above query to put into an
UPDATE statement.