' Открыть подключение к БД
cn.Open
' Удалить строки, если статус не "Активный" или ID пустой
cn.Execute "DELETE FROM c##avg.tmp_actual_us a WHERE a.status <>
'Активный' OR a.id IS NULL"
' Удалить дубли из c##avg.tmp_actual_us при наличии
cn.Execute "DELETE FROM c##avg.tmp_actual_us" & vbNewLine & _
"WHERE rowid IN (" & vbNewLine & _
"SELECT rid FROM ( SELECT t1.rowid as rid, ROW_NUMBER()
OVER (PARTITION BY id ORDER BY id) rn" & vbNewLine & _
"FROM c##avg.tmp_actual_us t1" & vbNewLine & _
"WHERE id IS NOT NULL ) WHERE rn>1)"
' Поставить конечную дату по недействующим УС
cn.Execute "UPDATE c##avg.actual_us s2 SET enddate = (" &
vbNewLine & _
"SELECT MAX(repdate)-1 FROM c##avg.tmp_actual_us)" &
vbNewLine & _
"WHERE enddate = to_date('01.01.2100', 'dd.mm.yyyy')" &
vbNewLine & _
"AND NOT EXISTS (SELECT 1 FROM c##avg.tmp_actual_us s
WHERE s2.id = s.id)"
' Слияние c##avg.actual_us с c##avg.tmp_actual_us. Если совпадения, то
проставить дату 01.01.2100 для недействующих УС,
' если нет совпадений, вставить несовпадающие строки в
c##avg.tmp_actual_us
cn.Execute "MERGE INTO actual_us au" & vbNewLine & _