1

我需要在过去 3 个月内循环查找活跃客户的数量。所以我进入我的交易表,找出在 3 个月内购买了东西的客户。但我想用解析函数来实现。

    select add_months(dat.date,-3) as dateFrom 
           dat.date as dateTo,
           (select count(distinct customerId)
            from Trx_Table
            where Trx_date between add_months(dat.date, -3) and sysdate
           ) as cnt 
    from dim_date dat
    where dat.date between date '2017-01-01' and sysdate;

输出是这样的:

dateFrom         dateTo       cnt
20160930         20170101     10
20161001         20170102     12
20161002         20170103     14

这表明在 20170101 上,我们在 20160930 和 20170101(过去 3 个月)之间有 10 个活跃客户......等等。

4

1 回答 1

0

恕我直言,分析函数在这里不正确使用,因为 a) 看起来你在每个时期的计数之后,没有显示所有行并显示客户的滚动计数,并且 b) 你的 trx_table 可能不包含所有日期的行。

相反,我会这样做:

SELECT   add_months(dd.dt, -3) date_from,
         dd.dt date_to,
         COUNT(DISTINCT customerid) cnt
FROM     dim_date dd
         INNER JOIN trx_table tt ON tt.trx_date BETWEEN add_months(dd.dt, -3) AND dd.dt)
GROUP BY add_months(dd.dt, -3),
         dd.dt;
于 2017-05-26T11:17:33.240 回答