Итак, у меня есть пара SQL-команд, которые я в основном хочу сделать проком, но при этом я хотел бы оптимизировать их немного больше.
Первая часть этого такова:
select tr_reference_nbr
from cfo_daily_trans_hist
inner join cfo_fas157_valuation on fv_dh_daily_trans_hist_id = dh_daily_trans_hist_id
inner join cfo_tran_quote on tq_tran_quote_id = dh_tq_tran_quote_id
inner join cfo_transaction on tq_tr_transaction_id = tr_transaction_id
inner join cfo_fas157_project_valuation ON fpv_fas157_project_valuation_id = fv_fpv_fas157_project_valuation_id AND fpv_status_bit = 1
group by tr_reference_nbr, fv_dh_daily_trans_hist_id
having count(*)>1
Этот запрос возвращает мне информацию о том, какие tr_reference_nbr
существуют, и в нашей системе есть повторяющиеся данные, которые необходимо удалить. После запуска я запускаю этот другой запрос, копируя и вставляя в tr_reference_nbr
по одному запросу, который мне дал указанный выше запрос:
select
tr_reference_nbr , dh_daily_trans_hist_id ,cfo_fas157_project_valuation.*,
cfo_daily_trans_hist.* ,
cfo_fas157_valuation.*
from cfo_daily_trans_hist
inner join cfo_fas157_valuation on fv_dh_daily_trans_hist_id = dh_daily_trans_hist_id
inner join cfo_tran_quote on tq_tran_quote_id = dh_tq_tran_quote_id
inner join cfo_transaction on tq_tr_transaction_id = tr_transaction_id
iNNER JOIN cfo_fas157_project_valuation ON fpv_fas157_project_valuation_id = fv_fpv_fas157_project_valuation_id
where
tr_reference_nbr in
(
[PASTEDREFERENCENUMBER]
)
and fpv_status_bit = 1
order by dh_val_time_stamp desc
Теперь этот запрос дает мне кучу записей для этого конкретного tr_reference_nbr
. Затем я должен просмотреть эти данные и найти строки, которые имеют совпадение (дубликат) dh_daily_trans_hist_id
. Как только это будет найдено, я просматриваю и проверяю, чтобы следующие строки также соответствовали этой строке, поэтому я знаю, что они являются истинными дубликатами: fpv_unadjusted_sponsor_charge
, fpv_adjusted_sponsor_charge
, fpv_unadjusted_counterparty_charge
и fpv_adjusted_counterparty_charge
.
Если все совпадают, я смотрю на еще один столбец, fv_create_dt
, и проверяю, что разница между двумя отметками времени составляет менее минуты. Если есть, я запускаю еще один запрос для строки, которая была сохранена РАНЬШЕ, которая выглядит следующим образом:
begin tran
update cfo_fas157_valuation set fpv_status_bit = 0 where fpv_fas157_project_valuation_id = [IDRECIEVEDFROMTHEOTHERTABLE]
commit
Как вы можете видеть, это все еще очень ручной процесс, хотя у нас есть несколько написанных запросов, но я пытаюсь найти решение для того, чтобы мы могли просто выполнить один запрос, и это в основном сделало бы ВСЕ, кроме для окончательного запроса. Так что в основном это то, что должно предоставить нам несколько fpv_fas157_project_valuation_id
, которые необходимо обновить.
Из этих запросов кто-нибудь из вас, ребята, видит простой способ объединить все это? Я работал над этим весь день и не могу заставить себя что-то запустить. Я чувствую, что продолжаю портить соединения и все такое.
Спасибо!