如何提高使用CONNECT BY和LEVEL子句的查询的处理时间



我想知道是否有一种方法重写下面的oracle SQL脚本,以获得更好的处理时间。当前的版本非常慢,不能处理我正在使用的更大的数据集。

我正试着根据每个客户在公司工作的年数给他们分配一个数字。我需要它返回每个客户的起始年份,然后一直数到现在。我已经试着在下面解释了

对于已经与业务合作了5年的客户,我希望脚本返回以下

tbody> <<tr>
客户代码 年份编号 年数
CUST120180
CUST120191
CUST120202
CUST120213
CUST120224
CUST120235

从最内层的查询开始,包含customer_details表可能没有用处——您没有在其中使用任何东西。它唯一可能的用途是过滤掉customer_details表中没有的收入元素,但我真的怀疑您正在尝试这样做。

更简洁的方法是使用递归CTE,从每个客户最早的日期开始,然后每次向前滚动一年,直到它等于当前年份。

With Recursive Years AS (
SELECT REV.CUSTOMER_CODE, Year(MIN(REV.ORDER_DATE)) AS Year_Number
FROM REVENUE_TABLE REV 
GROUP BY REV.CUSTOMER_CODE
UNION ALL
Select CUSTOMER_CODE, Year_Number+1
From Years
Where Year_Number < Year(Current_Date)
)
Select * from Years

现在你可以把剩下的表连接到这个结果,或者做任何你需要的事情。

相关内容

  • 没有找到相关文章

最新更新