凌乱的 SQL 查询需要更高效

如何解决凌乱的 SQL 查询需要更高效

此数据拉取需要帮助。效率/性能很糟糕,我对 SQL 了解得不够多,无法让它变得更好。我正处于一个需要我快速学习 SQL 的项目的中间,但考虑到我正在考虑的时间框架,我来找你,PROS ......任何来自专业人士的想法来实现这一点为了高效?

SELECT
d.[Date] AS [Date],LEFT(CONVERT(VARCHAR,d.[Date],112),6) AS [YearMo],FORMAT(d.[Date],'MMMM') AS [Month],YEAR(d.[Date]) AS [Year],e.[MbrNo] AS [Member ID],e.[Mkt_State] AS [Mkt State],e.[Mkt] AS [Mkt Segment],COALESCE(e.[Individual_Premium_Amt],0) AS [Individual Premium],COALESCE(e.[Total_Premium_Amt],0) AS [Total Premium],COALESCE(v.[Inpatient_Pd],0) AS [Inpatient Pd],COALESCE(v.[Outpatient_Pd],0) AS [Outpatient Pd],COALESCE(v.[Professional_Pd],0) AS [Professional Pd],COALESCE(v.[Other_Pd],0) AS [Other Pd],COALESCE(v.[Med_Pd],0) AS [Med Pd],COALESCE(SUM(v.[Med_Pd]) OVER (PARTITION BY e.[MbrNo],YEAR(d.[Date])),0) AS [Total Med Pd YTD],COALESCE(v.[Med_Allowed],0) AS [Med Allowed],COALESCE(v.[Rx_Pd],0) AS [Rx Pd],COALESCE(SUM(v.[Rx_Pd]) OVER (PARTITION BY e.[MbrNo],0) AS [Total RX Pd YTD],COALESCE(v.[Rx_Allowed],0) AS [Rx Allowed],COALESCE(v.[Med_RX_Pd],0) AS [Med Rx Pd],COALESCE(SUM(v.[Med_Pd] + v.[Rx_Pd]) OVER (PARTITION BY e.[MbrNo],YEAR(d.[Date])
    ORDER BY e.[MbrNo],6) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),0) AS [RS Med Rx Pd],YEAR(d.[Date]))
    + SUM(v.[Rx_Pd]) OVER (PARTITION BY e.[MbrNo],0) AS [Total Pd YTD],COALESCE(v.[Med_RX_Allowed],0) AS [Med Rx Allowed],CASE
    WHEN ((SUM(v.[Med_Pd] + v.[Rx_Pd]) OVER (PARTITION BY e.[MbrNo],YEAR(d.[Date]))) > rr.[Recover_Threshold])
    THEN ((SUM(v.[Med_Pd] + v.[Rx_Pd]) OVER (PARTITION BY e.[MbrNo],YEAR(d.[Date])) - rr.[Recover_Threshold]))
    ELSE 0 
END AS [Recoverable Amt],SUM(1.0) OVER (PARTITION BY e.[MbrNo],YEAR(d.[Date])) AS [MM (Yearly)],YEAR(d.[Date])) - rr.[Recover_Threshold]))
    / SUM(1.0) OVER (PARTITION BY e.[MbrNo],YEAR(d.[Date]))
    ELSE 0 
END AS [Recoverable Amtv2],COALESCE(rr.[Members],0) AS [Members],COALESCE(rr.[MM],0) AS [MM],COALESCE(rr.[Rx_Rebates],0) AS [Rx Rebates],COALESCE(rr.[RA_PMPM],0) AS [RA PMPM],COALESCE(rr.[RA_Payable],0) AS [RA Payable],COALESCE(rr.[Pd_Threshold],0) AS [SR Pd Threshold],COALESCE(rr.[Recover_Threshold],0) AS [SR Recover Threshold],COALESCE(rr.[CF_Inpatient_PMPM],0) AS [CF IP PMPM],COALESCE(rr.[CF_Outpatient_PMPM],0) AS [CF OP PMPM],COALESCE(rr.[CF_Professional_PMPM],0) AS [CF PROF PMPM],COALESCE(rr.[CF_RX_PMPM],0) AS [CF RX PMPM],COALESCE(rr.[CF_Med_PMPM],0) AS [CF Med PMPM],COALESCE(SUM(rr.[CF_RX_PMPM])+(rr.[CF_Med_PMPM]),0) AS [CF Med_Rx PMPM]


FROM -- Date Scaffold - Each month starting 20170101 to the current GETDATE() month 
    (SELECT
        DATEADD(MONTH,number,'20190101') AS [Date],EOMONTH(DATEADD(MONTH,'20190101')) AS [EOM Date]
        FROM MASTER..[spt_values]
        WHERE TYPE='P'
            AND DATEADD(MONTH,'20190101') <= GETDATE()
    ) AS d


INNER JOIN -- Join Med enrollment for each month to the date scaffold,creating the membermonths format
    (SELECT 
        e.*
        FROM [SomeDB].[dbo].[sometable] AS e
        WHERE [benefitType]=930700000
            AND e.[LOB]='Commercial'
            AND e.[Segment_Cancelled]<>'Yes'
            AND e.[Mbr_Status]<>'Pending Binder Payment'
            AND e.[MbrNo]<>0
    ) AS e
        ON e.[Start_Date]<=d.[Date] AND e.[End_Date]>=d.[EOM Date]


LEFT JOIN
    (SELECT
        c.[YEARMO],c.[MEMBERID],SUM(CASE WHEN c.[UTILGRP]='INPATIENT' THEN c.[Pd] ELSE 0 END) AS [Inpatient_Pd],SUM(CASE WHEN c.[UTILGRP]='OUTPATIENT' THEN c.[Pd] ELSE 0 END) AS [Outpatient_Pd],SUM(CASE WHEN c.[UTILGRP]='PROFESSIONAL' THEN c.[Pd] ELSE 0 END) AS [Professional_Pd],SUM(CASE WHEN [UTILGRP]='OTHER' THEN c.[Pd] ELSE 0 END) AS [Other_Pd],SUM(CASE WHEN c.[CLAIMTYPE]='Med' THEN c.[Pd] ELSE 0 END) AS [Med_Pd],SUM(CASE WHEN c.[CLAIMTYPE]='Med' THEN c.[ALLOWED] ELSE 0 END) AS [Med_Allowed],SUM(CASE WHEN c.[CLAIMTYPE]='Pharmacy' THEN c.[Pd] ELSE 0 END) AS [Rx_Pd],SUM(CASE WHEN c.[CLAIMTYPE]='Pharmacy' THEN c.[ALLOWED] ELSE 0 END) AS [Rx_ALlowed],SUM(CASE WHEN c.[CLAIMTYPE]='Med' OR c.[CLAIMTYPE]='Pharmacy' THEN c.[Pd] ELSE 0 END) AS [Med_RX_Pd],SUM(CASE WHEN c.[CLAIMTYPE]='Med' OR c.[CLAIMTYPE]='Pharmacy' THEN c.[ALLOWED] ELSE 0 END) AS [Med_RX_Allowed]

        FROM [SomeDB].[dbo].[SomeTable] AS c

        WHERE c.[MbrNo] <> 0
            AND c.[CLAIMLINESTATUS] NOT IN ('D','V')
            AND c.[LOB]='IND'

        GROUP BY c.[YearMo],c.[MbrNo]

    ) AS v
        ON e.[MbrNo]=v.[MbrNo] AND LEFT(CONVERT(VARCHAR,6)=v.[YearMo]


LEFT JOIN [SomeDB].[dbo].[SomeTable] AS rr
    ON e.[Mkt_Segment]=rr.[Mkt_Segment] AND LEFT(CONVERT(VARCHAR,6)=rr.[YearMo]


GROUP BY d.[Date],e.[MbrNo],e.[Mkt_State],e.[Mkt_Segment],e.[Individual_Premium_Amt],e.[Total_Premium_Amt],v.[Inpatient_Pd],v.[Outpatient_Pd],v.[Professional_Pd],v.[Other_Pd],v.[Med_Pd],v.[Med_Allowed],v.[Rx_Pd],v.[Rx_Allowed],v.[Med_RX_Pd],v.[Med_RX_Allowed],rr.[Members],rr.[MM],rr.[Rx_Rebates],rr.[RA_PMPM],rr.[RA_Payable],rr.[Pd_Threshold],rr.[Recover_Threshold],rr.[CF_Inpatient_PMPM],rr.[CF_Outpatient_PMPM],rr.[CF_Professional_PMPM],rr.[CF_RX_PMPM],rr.[CF_Med_PMPM]

解决方法

我会将所有 0 语句(通常不是 SARGable)替换为可 Sargable 的 >0 语句。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res