我知道我必须在这个查询中使用CONNECT BY PRIOR,但我不确定如何实现它。
我们有客户谁购买每月订阅,那些得到自动更新每个月。我们有一个日志表,可以显示您当前的订单ID和您以前的订单ID。因此,表记录可能看起来像这样:
CUSTOMER ID: 1 ORDER ID: 123 PREV_ORDER_ID: STATUS: Complete
CUSTOMER ID: 1 ORDER ID: 456 PREV_ORDER_ID: 123 STATUS: Complete
CUSTOMER ID: 1 ORDER ID: 789 PREV_ORDER_ID: 456 STATUS: Complete
CUSTOMER ID: 1 ORDER ID: 888 PREV_ORDER_ID: 789 STATUS: Complete
CUSTOMER ID: 1 ORDER ID: 999 PREV_ORDER_ID: 888 STATUS: Active
我期待着计算有多少客户有至少13个月的连续订阅,与最近的订阅没有差距将有一个“活跃”的状态。如果订阅中断,PREV_ORDER_ID将为NULL。
我希望在查询中做到这一点,而不必为它编写匿名块。
非常感谢!
2条答案
按热度按时间gorkyyrv1#
您可以这样做(使用实际的表名和列名,而不是应该删除的查询中的
with
子句)。请注意,分层递归从末尾(从'Active'
状态)开始并向后进行;在我查询中,我在级别4停止它,因为我不想写入足够的行来到达级别13。当然,您必须在where
子句中将4替换为13。mum43rcc2#
需要更多的数据和测试。
也许会对你有帮助