缓慢查询,使用前一个非空行中的值填充空单元格

问题描述 投票:0回答:1

我得到了这个查询,用以前的非空行中的值填充空单元格,但它花了很长时间(几乎有 100.000 条记录)。

希望你能帮助我更快地查询来实现这一目标。

这些都是带有示例数据的 dll:

CREATE TABLE #TEST_INSURANCE_PAYMENTS(
     id_num int IDENTITY(1,1),[Provider] varchar(59), [Location] varchar(104),last_update datetime2, [Total_Charge] money
      );
INSERT INTO #TEST_INSURANCE_PAYMENTS
    ([Provider], [Location],[last_update],[Total_Charge])
VALUES
    ('Vimalkumar Veerappan', 'Arizona Heart Specialists',CURRENT_TIMESTAMP,100.0),
    (' ', 'Banner Boswell Medical Center - Inpatient',CURRENT_TIMESTAMP,102.0),
    (' ', 'Arizona Heart Specialists WEST',CURRENT_TIMESTAMP,800.0),
   ('Akash Makkar', 'Arizona Heart Specialists WEST',CURRENT_TIMESTAMP,500.0),
  (' ', 'Pinnacle Vein & Vascular Center Sun City',CURRENT_TIMESTAMP,500.0),
  (' ', 'Abrazo Arizona Heart Hospital - Outpatient',CURRENT_TIMESTAMP,60.0),
  (' ', 'Banner Boswell Medical Center - Inpatient',CURRENT_TIMESTAMP,60.0),
  (' ', 'Banner Del E Webb Medical Center - Inpatient',CURRENT_TIMESTAMP,10.0)
select id_num,[Provider],[Location],[Total_Charge],[last_update]
from #TEST_INSURANCE_PAYMENTS where IsNull([Provider], '') <> ''
union
select y.id_num, x.[Provider], y.[Location],y.[Total_Charge],y.[last_update]
from #TEST_INSURANCE_PAYMENTS as x
join(
select t1.id_num,max(t2.id_num) as MaxID, t1.[Location],t1.[Total_Charge],t1.[last_update]
from (select * from #TEST_INSURANCE_PAYMENTS where IsNull([Provider], '') = '') as t1
join (select * from #TEST_INSURANCE_PAYMENTS where IsNull([Provider], '') <> '') as t2 on t1.id_num > t2.id_num
group by t1.id_num,  t1.[Location],t1.[Total_Charge],t1.[last_update]
)as y on x.id_num = y.MaxID order by id_num;

sql sql-server performance join subquery
1个回答
0
投票

如果没有计划,我们将无法判断正在发生什么(正如戴尔所建议的那样)。 同时,也许这会好一点:

SELECT x.id_num, COALESCE(NULLIF(x.Provider,' '),y.provider) AS [Provider], x.Location, x.last_update, x.Total_Charge
  FROM @TEST_INSURANCE_PAYMENTS x
    OUTER APPLY (SELECT MAX(id_num) AS mid_num FROM @TEST_INSURANCE_PAYMENTS y WHERE y.id_num < x.id_num AND y.[Provider] IS NOT NULL AND y.Provider <> ' ' AND x.Provider = '') a
    LEFT OUTER JOIN @TEST_INSURANCE_PAYMENTS y
      ON a.mid_num = y.id_num;
id_num 提供商 地点 最后更新 总费用
1 维马尔库马尔·维拉潘 亚利桑那州心脏专家 2023-10-04 15:55:59.6833333 100.00
2 维马尔库马尔·维拉潘 班纳博斯韦尔医疗中心 - 住院部 2023-10-04 15:55:59.6833333 102.00
3 维马尔库马尔·维拉潘 亚利桑那州西部心脏专家 2023-10-04 15:55:59.6833333 800.00
4 阿卡什·马卡 亚利桑那州西部心脏专家 2023-10-04 15:55:59.6833333 500.00
5 阿卡什·马卡 Pinnacle 静脉和血管中心太阳城 2023-10-04 15:55:59.6833333 500.00
6 阿卡什·马卡 亚利桑那州阿布拉索心脏病医院 - 门诊 2023-10-04 15:55:59.6833333 60.00
7 阿卡什·马卡 班纳博斯韦尔医疗中心 - 住院部 2023-10-04 15:55:59.6833333 60.00
8 阿卡什·马卡 Banner Del E Webb 医疗中心 - 住院病人 2023-10-04 15:55:59.6833333 10.00
© www.soinside.com 2019 - 2024. All rights reserved.