Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取有索赔的前3个月的数据_Sql_Sql Server - Fatal编程技术网

Sql 获取有索赔的前3个月的数据

Sql 获取有索赔的前3个月的数据,sql,sql-server,Sql,Sql Server,我有一个成员及其索赔价值表,我感兴趣的是获得每个成员前3个月的索赔价值。以下是我迄今为止所尝试的: WITH START as (SELECT [HEALTH_ID] ,MIN([CLM_MONTH]) as DOS FROM [TEST] GROUP BY [HEALTH_PLAN_ID]) SELECT HEALTH_ID ,DOS ,FORMAT(DATEADD(month, +1, DOS), 'MM/dd/yyyy'

我有一个成员及其索赔价值表,我感兴趣的是获得每个成员前3个月的索赔价值。以下是我迄今为止所尝试的:

 WITH START as
      (SELECT [HEALTH_ID]
          ,MIN([CLM_MONTH]) as DOS
      FROM [TEST]
      GROUP BY
     [HEALTH_PLAN_ID])

SELECT HEALTH_ID
,DOS
,FORMAT(DATEADD(month, +1, DOS), 'MM/dd/yyyy')
,FORMAT(DATEADD(month, +2, DOS), 'MM/dd/yyyy')
FROM START
我的计划是获得索赔前3个月的日期,然后将索赔金额加入ID和日期。这里的问题是不是每个成员都在连续的几个月内有索赔,dateadd函数给了我连续的几个月。例如,如果会员在1月、2月、4月、5月等有索赔,我对1月、2月和4月的索赔感兴趣,因为3月没有索赔。使用dateadd函数将为我提供1月、2月、3月(不包括4月)的日期

总之,我需要帮助获取索赔值的前3个月(月份可能是连续的,也可能不是连续的)。

使用对月份进行排序,按
健康\u Id
划分,以便筛选每个
健康\u Id
的前三个月

;with cte as (
  select *
    , dr = dense_rank() over (
        partition by Health_ID 
        order by dateadd(month, datediff(month, 0, CLM_Month)  , 0) /* truncate to month */
        )
  from test
)
select *
from cte
where dr < 4 -- dense rank of 1-3
rextester演示:

返回:

+-----------+------------+----+
| health_id | clm_month  | dr |
+-----------+------------+----+
|         1 | 2017-01-01 |  1 |
|         1 | 2017-02-01 |  2 |
|         1 | 2017-03-01 |  3 |
|         2 | 2017-01-01 |  1 |
|         2 | 2017-02-01 |  2 |
|         2 | 2017-04-01 |  3 |
|         3 | 2017-01-01 |  1 |
|         3 | 2017-01-15 |  1 |
|         3 | 2017-02-01 |  2 |
|         3 | 2017-02-15 |  2 |
|         3 | 2017-04-01 |  3 |
|         3 | 2017-04-15 |  3 |
+-----------+------------+----+

他们一个月内可以有一次以上的索赔吗?在这种情况下,结果应该是什么?您也可以使用
EOMONTH
。@VamsiPrabhala
EOMONTH()
是sql server 2012+,并且问题中没有引用所使用的版本。假设它是sql server 2012+,因为OP在问题中有
格式
。@VamsiPrabhala很公平,这是一个合理的假设。@xoxotolu很乐意帮忙!
+-----------+------------+----+
| health_id | clm_month  | dr |
+-----------+------------+----+
|         1 | 2017-01-01 |  1 |
|         1 | 2017-02-01 |  2 |
|         1 | 2017-03-01 |  3 |
|         2 | 2017-01-01 |  1 |
|         2 | 2017-02-01 |  2 |
|         2 | 2017-04-01 |  3 |
|         3 | 2017-01-01 |  1 |
|         3 | 2017-01-15 |  1 |
|         3 | 2017-02-01 |  2 |
|         3 | 2017-02-15 |  2 |
|         3 | 2017-04-01 |  3 |
|         3 | 2017-04-15 |  3 |
+-----------+------------+----+