Sql 获取有索赔的前3个月的数据
我有一个成员及其索赔价值表,我感兴趣的是获得每个成员前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'
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
。@VamsiPrabhalaEOMONTH()
是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 |
+-----------+------------+----+