sql - 过滤最大有效约会
问题描述
我有下面的查询让我得到至少有两行COVERAGE_ELECT = 'E'
并且计划类型为 49 的 EMPLID。
WITH Coverage_CTE (EMPLID, COVERAGE_ELECT)
AS
(
SELECT EMPLID, COUNT(COVERAGE_ELECT)
FROM PS_SAVINGS_PLAN
WHERE COVERAGE_ELECT = 'E'
AND PLAN_TYPE = '49'
GROUP BY EMPLID
HAVING COUNT(COVERAGE_ELECT) > 1
)
, Emp_CTE (EMPLID)
AS
(
select distinct EMPLID from Coverage_CTE
)
SELECT SP.EMPLID, SP.PLAN_TYPE, SP.EFFDT, SP.COVERAGE_ELECT, SP.SAVINGS_COVRG, SP.FLAT_DED_AMT, SP.PCT_GROSS
FROM PS_SAVINGS_PLAN as SP
WHERE SP.EMPLID IN (Select EMPLID from Emp_CTE)
AND SP.COVERAGE_ELECT = 'E'
AND PLAN_TYPE = '49'
这似乎工作正常,但是我想通过仅包含EMPLID
有效日期大于上面选择的“E”行的最大值的EFFDT
行的行来进一步过滤结果,即“W”或“T”。
上面的查询当前有EMPLID
5423H 的行(因为你看到的这个人有超过 1COVERAGE_ELECT = 'E'
行 (3))。但是,您会看到此人有两行COVERAGE_ELECT
等于 T 和 W,其中EFFDT
' 大于最大EFFDT
“E”行的生效日期 (2018-10-01)。
EMPLID PLAN_TYPE EFFDT COVERAGE_ELECT
5423H 49 2013-01-01 W
5423H 49 2015-10-02 E
5423H 49 2015-10-09 T
5423H 49 2016-09-29 E
5423H 49 2018-10-01 E
5423H 49 2018-10-07 T
5423H 49 2018-11-14 W
所以你在这个例子中看到了这两种情况 - 1. 这个 EMPLID 有一行,其 'T' 大于 (2018-10-07) 最大 EFFDT 'E' 行 (2018-10-01) 和 2. 他们有一排 'W' 大于 (2018-11-14) 最大 EFFDT 'E' 行。如果其中任何一种情况为真,那么我不希望它们导致我上面的查询。我希望将此附加逻辑构建到上述查询中。我希望这是有道理的..
解决方案
根据您的叙述,可以根据简单的条件聚合来回答:
WITH Coverage_CTE AS
(
SELECT EMPLID
,Count(CASE WHEN COVERAGE_ELECT IN ('E') THEN effdt end) AS cntE
,Max(CASE WHEN COVERAGE_ELECT IN ('T', 'W') THEN effdt end) AS maxT
,Max(CASE WHEN COVERAGE_ELECT IN ('E') THEN effdt end) AS maxE
FROM @PS_SAVINGS_PLAN
WHERE PLAN_TYPE = '49'
GROUP BY EMPLID
)
SELECT EMPLID FROM Coverage_CTE
WHERE
-- at least two rows with COVERAGE_ELECT = 'E'
cntE > 1
-- where there isn't a row for the EMPLID with an effective date that is greater
-- than the max EFFDT of the 'E' rows selected above that is either a 'W' or a 'T'
AND (maxT < maxE OR maxT IS NULL)
推荐阅读
- r - 羽毛中的 64 位整数支持
- parquet - 如何创建 Parquet 格式的 Glue 表?
- javascript - 添加自定义字体系列以反应原生文本不起作用
- java - 使用 if 语句时无法退出程序
- javascript - 尝试从外部 php 文件标记数据创建谷歌地图 api 集群
- matlab - 计算分段函数中的向量
- python - 尝试读取 .py 文件并创建 .mp4 输出时出现 CMD/Python 语法错误
- curl - 使用 curl 将不记名授权标头传递给 AWS 函数
- reactjs - 尽管 TypeScript 编译器错误,为什么我的 React Native 应用程序构建成功?
- sql - 在 where 子句中使用这个子查询的语法问题是什么