Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> SQL: number of continuous periods with or without orders
Dear all,
I posted this problem to comp.databases.oracle.server on Dec. 6th, 2001, but there have been no follow-ups. I guess comp.databases.oracle.misc is more appropriate for SQL discussion, I hope someone would be interested:
A direct-selling company has the following two core tables:
1.tb_orders: order_no, period, dealer_no, item_no, units
1-1.PK=order_no+item_no, FK=period+dealer_no
1-2.sales transactions, denormalized to improve performance
2.tb_dealers: period, dealer_no, dealer_type
2-1.PK=period+dealer_no
2-2.periods are a custom time system, assume them numeric for easy
calculation
2-3.number of dealers and dealer types can change over periods, but
the same dealer always holds the same dealer_no
2-4.a dealer joins the company by placing orders, and will be removed
from the dealer list after a certain periods of inactivity
They want to find out the factors related to the drop in dealer activity, two terms are defined:
1.y-count: number of continuous periods with orders 2.n-count: number of continuous periods without orders 3.At the beginning of each period, each dealer has a yn-count statusaccording to activities of direct previous periods backwards. 4.yn-count is the combination of positive y-count and negative n-count because they are mutually exclusive.
They want to get a report like this:
period yn_count t_dealer_count a_dealer_count order_count units
------ -------- -------------- -------------- ----------- ----- 1 -3 1 -2 1 -1 1 1 1 2 1 3 2 -3 2 -2 2 -1 2 1 2 2 2 3 3 -3 3 -2 3 -1 3 1 3 2 3 3
t_dealer_count: total dealer count
a_dealer_count: active dealer count (those who place ordres)
(for simplicity, the number of periods to 'look back' is only 3, the
measures are obvious)
If we have the yn_count for each dealer_no+period group, we can easily make the above report by grouping period+yn_count, but that is the difficult part. The nature of the yn_count measure is a state-transition machine over the period dimension, which seems to go beyond the ability of 'windowing functions' or 'analytical functions'.
I have a partial solution to this problem, which requires a limit on the number of periods to 'look back', say 3 periods, I can use the lag function to get the units of previous 3 periods and then get the yn-count with a simple user-defined function with 3 parameters. This can be good enough for some cases, but not in general cases.
Anyone can suggest a complete solution, i.e., one without a limit on the number of periods to 'look back'? Thanks in advance.
Dino
OCP, Taipei
Received on Sun Jan 06 2002 - 03:53:02 CST
![]() |
![]() |