我拥有的数据集在日期之间有差距,我用Lag()函数计算了存在差距的月份数。然后在第二个查询中使用dense_rank(),我为每个ID计算活跃月份。然而,正如您在表中看到的,计数在有间隙的地方重置,但在此之后,它继续使用先前的计数而不是重置的数字。
你能帮帮我吗?
SELECT
GP, ID, Date,
DENSE_RANK() OVER (PARTITION BY ENR.GP, ENR.ID, Age, ENR.DATEDIFF
ORDER BY ENR.DATE ASC) AS Active_MOS
FROM
(SELECT
GP, ID,
MONTHS_BETWEEN (DATE, LAG(DATE, 1) OVER (PARTITION BY GP, ID, CASE WHEN GNDR = 'M' AND AGE < 35 THEN 'YES' ELSE 'NO' END ORDER BY YRMO ASC )) AS DateDiff
FROM
TABLE2)
1条答案
按热度按时间9udxz4iz1#
你必须给每个岛给予一个数字,并把它放在dense_rank的分区中。如果您设置一个值为1,当一行不跟随前一行时,则该值的累积和可以用作岛的编号: