最大有效日期过滤器

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

我有以下查询,使我获得至少具有两行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'

这似乎很好用,但是我想进一步过滤结果,方法是仅包括行中没有有效日期大于'E的最大值EMPLIDEFFDT行上面选择的行是W]或'T'。

上面的查询当前有EMPLID 5423H的行(因为您看到的这个人有多于1个COVERAGE_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'行。如果以上任何一种情况都成立,那么我不希望它们导致上述查询。我正在寻找在上面的​​查询中构建此附加逻辑。我希望这是有道理的。

[我有以下查询,使我的EMPLID至少具有两行,且COVERAGE_ELECT ='E',并且计划类型为49。WITH Coverage_CTE(EMPLID,COVERAGE_ELECT)AS(SELECT EMPLID,COUNT(...

sql sql-server-2014
2个回答
0
投票

所有未经测试

我将更改您的CTE以包括最大effdt,为最大WT EFFDATE添加另一个CTE,然后选择自己喜欢的方法以将另一个排除。

0
投票

根据您的叙述,可以根据简单的[[条件汇总

© www.soinside.com 2019 - 2024. All rights reserved.