【发布时间】:2018-05-18 21:17:08
【问题描述】:
我正在尝试获取每个客户开始日期之后的每个日期的平均支出(这是为了新近-频率-货币分析的目的)。这是下面的货币价值元素,我希望得到客户开始日期之后所有交易的总和除以他们购买的天数。我正在使用 Oracle 12c。
我有以下工作,但包括完整的日期范围。
RFM AS (
SELECT SRC_USER_ID,
COUNT(distinct PICKUP_DATE) -1 as frequency,
(MAX(PICKUP_DATE) - MIN(PICKUP_DATE)) as recency,
(TO_DATE ('2018/05/12', 'yyyy/mm/dd') - MIN(PICKUP_DATE)) as T,
(CASE WHEN COUNT(distinct PICKUP_DATE)-1=0 THEN 0 ELSE
SUM(PRICE_TOTAL)/COUNT(distinct PICKUP_DATE) END) AS monetary_value
FROM TRANSACTIONS
group by SRC_USER_ID
我认为我需要使用窗口聚合函数 (https://ss64.com/ora/syntax-analytic-aggregate.html)。但是,当我尝试以下方法时,它不起作用。
RFM AS (
SELECT SRC_USER_ID,
COUNT(distinct PICKUP_DATE) -1 as frequency,
(MAX(PICKUP_DATE) - MIN(PICKUP_DATE)) as recency,
(TO_DATE ('2018/05/12', 'yyyy/mm/dd') - MIN(PICKUP_DATE)) as T,
(CASE WHEN COUNT(distinct PICKUP_DATE)-1=0 THEN 0 ELSE
SUM(PRICE_TOTAL) OVER (ORDER BY PICKUP_DATE) RANGE INTERVAL '1' DAY FOLLOWING UNBOUNDED/COUNT(distinct PICKUP_DATE) END) AS monetary_value
FROM TRANSACTIONS
group by SRC_USER_ID
任何帮助将不胜感激。
【问题讨论】:
-
如果您准备了样本测试输入数据和该数据的预期结果,这将很有帮助,最好使用以下站点之一:sqlfiddle.com 或 dbfiddle.uk/?rdbms=oracle_11.2 查看这些查询,很难猜猜是怎么回事,我不确定这个函数是否是最好的解决方案。
标签: oracle oracle12c window-functions