Date 日期范围内的运行计数
在Teradata中,我试图获取指定日期范围内发生的事件总数。我需要的是找出哪些客户在10天内提出了5项或5项以上的索赔 样本数据: 索赔ID索赔客户数量Date 日期范围内的运行计数,date,count,teradata-sql-assistant,Date,Count,Teradata Sql Assistant,在Teradata中,我试图获取指定日期范围内发生的事件总数。我需要的是找出哪些客户在10天内提出了5项或5项以上的索赔 样本数据: 索赔ID索赔客户数量 15087 1/1/2020 123000 15099 2/3/2020 123000 18473 2/8/2020 123000 18476 2/8/2020 123000 18488 2/10/2020 123000 15080 1/1/2020 133000 15082 1/
15087 1/1/2020 123000
15099 2/3/2020 123000
18473 2/8/2020 123000
18476 2/8/2020 123000
18488 2/10/2020 123000
15080 1/1/2020 133000
15082 1/1/2020 133000
18555 2/13/2020 133000
18588 2/15/2020 133000
15601 2/16/2020 133000
15711 2/18/2020 133000
15799 2/21/2020 133000
15816 2/22/2020 133000
15926 2/27/2020 133000
15988 3/1/2020 133000
预期结果:
Cust_num Claim_Count Min_date Max Date
133000 6 2/13/2020 2/22/2020
以下是我使用滞后函数得到的代码:
select CLAIM_DT, CUST_NUM,
ROW_NUMBER() OVER (PARTITION BY CUST_NUM ORDER BY CUST_NUM, CLAIM_DT) as ROW_ID,
LAG(claim_dt,1) OVER(partition by cust_num order by claim_dt) as datediff,
claim_dt -datediff as DAYS_BETWEEN,
COUNT(claim_id) OVER(
PARTITION BY Cust_Num
ORDER BY claim_dt
RESET WHEN DAYS_BETWEEN > 10
ROWS BETWEEN 5 PRECEDING AND 5 FOLLOWING
) AS Claims_count, CLAIM_ID
from (
select CLAIM_ID, CLAIM_DT, CUST_NUM
from Claims_CUST_STILL_OPEN
) as dt
QUALIFY Claims_count >= 5
order by 2,1,3
我能够在minclaim_dt和maxclaim_dt之间得到一个简单的计数,但是我不知道如何得到一个运行计数
我相信我需要一个使用无界前几行的重置函数,但就是不能让它工作
任何帮助都将不胜感激。如果您想了解哪些客户在任何10天内提出了5+索赔,这里有一种方法: 选择 客户数量, 计数索赔单 按t.Cust_Num划分 按日历日期订购 前4行和后5行之间的行-计算10天窗口中的索赔 作为一个重要的因素 来自sys_calendar.calendar c-种子结果集,范围为天 在c.calendar\u date=t.claim\u dt上左加入我的表t-加入客户数据 其中,c.日历\ u日期介于和之间 限定移动\u计数>=5-仅获取具有5+索赔的行
您可能无法在主查询中包含DISTINCT,因此要获得cust_num值的唯一列表,您可以从外部选择DISTINCT cust_num。。。然后将上面的查询放在…中。如果您想找出哪些客户在任何10天内有5次以上的索赔,这里有一种方法: 选择 客户数量, 计数索赔单 按t.Cust_Num划分 按日历日期订购 前4行和后5行之间的行-计算10天窗口中的索赔 作为一个重要的因素 来自sys_calendar.calendar c-种子结果集,范围为天 在c.calendar\u date=t.claim\u dt上左加入我的表t-加入客户数据 其中,c.日历\ u日期介于和之间 限定移动\u计数>=5-仅获取具有5+索赔的行
您可能无法在主查询中包含DISTINCT,因此要获得cust_num值的唯一列表,您可以从外部选择DISTINCT cust_num。。。然后将上面的查询放在…中,首先展开每个索赔行,覆盖有效的10天窗口,创建10个行副本,然后汇总并过滤结果。外部分组BY仅给出一行,每个最小值的最大计数/最新最大值
select cust_id, max(claim_ct) as claim_ct, min_dt, max(max_dt) as max_ct
FROM (
select cust_id, count(*) as claim_ct, min(claim_dt) as min_dt, max(claim_dt) as max_dt
FROM (
select claim_id, claim_dt, cust_id, begin(window_pd) as window_dt
from claims
expand on period(claim_dt, claim_dt+10) as window_pd
) expand_effective_date_range
group by cust_id, window_dt /* running total by customer & day */
having window_dt = max_dt /* only keep rows with matching claim dates */
and Claim_ct >=5 /* and then only if count is at least 5 */
) summarize_and_filter
group by cust_id, min_dt;
首先展开每个索赔行以覆盖有效的10天窗口,创建该行的10个副本,然后汇总和筛选结果。外部分组BY仅给出一行,每个最小值的最大计数/最新最大值
select cust_id, max(claim_ct) as claim_ct, min_dt, max(max_dt) as max_ct
FROM (
select cust_id, count(*) as claim_ct, min(claim_dt) as min_dt, max(claim_dt) as max_dt
FROM (
select claim_id, claim_dt, cust_id, begin(window_pd) as window_dt
from claims
expand on period(claim_dt, claim_dt+10) as window_pd
) expand_effective_date_range
group by cust_id, window_dt /* running total by customer & day */
having window_dt = max_dt /* only keep rows with matching claim dates */
and Claim_ct >=5 /* and then only if count is at least 5 */
) summarize_and_filter
group by cust_id, min_dt;
这似乎并没有得到我所需要的东西,尽管我很感激。我需要一种方法来重置日期范围的计数。虽然这似乎给了我一个索赔计数,但它并没有给我从每个新日期重置的能力。我认为问题在于10天后需要重置功能。你说的重置日期范围的计数是什么意思?请在您的原始帖子中添加一些示例预期输出。我添加了预期结果。我也在使用滞后函数计算一个可能的计数,如果我让它工作,我将与大家分享。这似乎并没有得到我所需要的,尽管我很感激。我需要一种方法来重置日期范围的计数。虽然这似乎给了我一个索赔计数,但它并没有给我从每个新日期重置的能力。我认为问题在于10天后需要重置功能。你说的重置日期范围的计数是什么意思?请在您的原始帖子中添加一些示例预期输出。我添加了预期结果。我也在使用滞后函数计算一个可能的计数,如果我让它起作用,我将与大家分享。这很好。我认为我在使用滞后功能和重置时偏离了轨道。这太棒了。我认为我在使用滞后功能和重置时偏离了轨道。