所以我有几个SQL命令,我基本上想要做一个proc,但在这样做时,我想更优化它们。
第一部分是:
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
和{{1} }。
如果这些都匹配,那么我会查看另一列fv_create_dt
,并确保那两个时间戳之间的差异不到一分钟。如果有,我在EARLIER存储的行上运行另一个查询,如下所示:
begin tran
update cfo_fas157_valuation set fpv_status_bit = 0 where fpv_fas157_project_valuation_id = [IDRECIEVEDFROMTHEOTHERTABLE]
commit
正如您所看到的,即使我们确实编写了一些查询,这仍然是一个非常手动的过程,但我正在尝试找到一个解决方案,我们可以只运行一个查询,它基本上可以做所有事情,除了为了最后的查询。所以基本上会为我们提供一些需要更新的fpv_fas157_project_valuation_id
。
通过查看这些查询,您是否有人能够轻松地将所有这些结合起来?我整天都在努力,似乎无法运行。我觉得我一直搞砸了连接和东西。
谢谢!
答案 0 :(得分:2)
您可以通过多种方式组合这些查询:
将它们放在单独的表/变量/ CTE中后,您可以轻松加入它们。
然后你还要做一件事,那就是在两个连续的行中找到日期时间的差异。有一个技巧可以做到这一点:
只需对您的自我加入进行一次测试,以确保只过滤您需要过滤的行。
如果您仍然遇到此问题,请随时发表评论。
有趣的提示:SQL Server Denali具有T-SQL增强功能LEAD和LAG,可以在没有自连接的情况下访问后续行和上一行。