我有一张表没有政策号,状态代码,状态日期。
我希望在使用每个策略的状态日期排序后,了解每个策略的状态日期(具有多个具有不同状态代码的记录)的差异。
状态日期的差异应该只考虑某些状态代码。 例如:考虑5,6是要考虑的状态代码
pol_nm st_cd st_date
pol 1 5 1st june
pol 1 6 2nd june
pol 1 7 4th june
pol 1 6 6th june
pol 1 8 9th june
pol 1 9 10th june
pol 1 10 11th june
我应该输出
pol_nm sleep_tm
pol 1 6
这是(6月4日 - 6月1日)+(6月6日 - 6月6日)的差异
任何人都可以帮我解决输出问题吗?
基于新请求的一些示例:
Policy_No Status_Cd Status_Dt
A 8 02/01/2011
A 23 03/30/2011
Policy_Sleep_Time 0
---------------------------------------------------------
Policy_No Status_Cd Status_Dt
B 8 12/29/2011
B 27 01/28/2012
B 27 01/28/2012 124
B 34 05/31/2012
Policy_Sleep_Time 124
---------------------------------------------------------
Policy_No Status_Cd Status_Dt
C 4 02/11/2007
C 4 02/11/2007
Policy_Sleep_Time 0
---------------------------------------------------------
Policy_No Status Cd Status_Dt
D 8 9/17/2012
D 8 9/17/2012
D 8 9/17/2012
D 23 1/1/2013
D 3 2/1/2013
D 5 2/5/2012
D 23 3/1/2013
D 8 3/6/2013
D 8 3/6/2013
D 44 3/9/2013
D 1 3/23/2013
Here the policy sleep time is 35
答案 0 :(得分:3)
你仍然没有指定实际的规则,所以这个游标逻辑只是一个猜测:
按pol_nm和st_date排序,然后对每个pol_nm重复:
这转换为以下SQL
SELECT pol_nm, SUM(days)
FROM
(
SELECT pol_nm, next_date-MIN(ST_DATE) AS days
FROM
(
SELECT pol_nm, ST_CD, ST_DATE,
MIN(CASE WHEN ST_CD NOT IN (5,6) THEN ST_DATE END)
OVER (PARTITION BY pol_nm
ORDER BY ST_DATE
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS next_date
FROM tab
QUALIFY ST_DATE <> next_date
) AS dt
GROUP BY pol_nm, next_date
) AS dt
GROUP BY pol_nm
迪特