我正在寻找从他们的首次购买日期开始的SQL客户回购频率

问题描述 投票:0回答:2

我正在尝试从客户的第一笔订单日期开始查找其回购价格。例如,对于2016年,在最初的1-365天中有多少客户购买了1倍的商品,有多少人购买了两次,等等。

我有一个transaction_detail表,如下所示:

txn_date Customer_ID  Transaction_Number    Sales 
1/2/2019    1           12345                $10
4/3/2018    1           65890                $20
3/22/2019   3           64453                $30
4/3/2019    4           88567                $20
5/21/2019   4           85446                $15
1/23/2018   5           89464                $40
4/3/2019    5           99674                $30
4/3/2019    6           32224                $20
1/23/2018   6           46466                $30
1/20/2018   7           56558                $30

我能够找到2016年购物的顾客以及他们在2016年回购了多少次,日期。

我需要一个查询的起点,我不确定如何在我的SQL代码中构建此逻辑。

任何帮助将不胜感激。

我正在使用以下查询:

WITH by_year AS (SELECT Customer_ID, to_char(txn_date, 'YYYY') AS visit_year FROM table GROUP BY Customer_ID, to_char(txn_date, 'YYYY')), with_first_year AS (SELECT Customer_ID, visit_year, FIRST_VALUE(visit_year) OVER (PARTITION BY Customer_ID ORDER BY visit_year) AS first_year FROM by_year), with_year_number AS (SELECT Customer_ID, visit_year, first_year, (visit_year - first_year) AS year_number FROM with_first_year) SELECT first_year AS first_year, SUM(CASE WHEN year_number = 0 THEN 1 ELSE 0 END) AS year_0, SUM(CASE WHEN year_number = 1 THEN 1 ELSE 0 END) AS year_1, SUM(CASE WHEN year_number = 2 THEN 1 ELSE 0 END) AS year_2, SUM(CASE WHEN year_number = 3 THEN 1 ELSE 0 END) AS year_3, SUM(CASE WHEN year_number = 4 THEN 1 ELSE 0 END) AS year_4, SUM(CASE WHEN year_number = 5 THEN 1 ELSE 0 END) AS year_5, SUM(CASE WHEN year_number = 6 THEN 1 ELSE 0 END) AS year_6, SUM(CASE WHEN year_number = 7 THEN 1 ELSE 0 END) AS year_7, SUM(CASE WHEN year_number = 8 THEN 1 ELSE 0 END) AS year_8, SUM(CASE WHEN year_number = 9 THEN 1 ELSE 0 END) AS year_9 FROM with_year_number GROUP BY first_year ORDER BY first_year

sql oracle oracle-sqldeveloper
2个回答
0
投票
使用窗口功能和聚合:

select cnt, count(*), min(customer_id), max(customer_id) from (select customer_id, count(*) as cnt from (select td.*, min(txn_date) over (partition by Customer_ID) as min_txn_date from transaction_detail td ) td where txn_date >= min_txn_date and txn_date < min_txn_date + interval '365' day group by customer_id ) c group by cnt order by cnt;


0
投票
据我所知,您想知道在购买之日起一年或一年后于2016年首次购买并回购的不重复人士的人数。

Select * from ( Select customer_id, Floor(months_between(txn_date, lead_txn_date)/12) as num_years From ( Select customer_id, txn_date, row_number() over (partition by Customer_ID order by txn_date) as rn, lead(txn_date) over (partition by Customer_ID order by txn_date) as lead_txn_date From your_table ) Where txn_date >= date '2016-01-01' and txn_date < date '2017-01-01' and rn = 1 And months_between(txn_date, lead_txn_date) >= 12 ) Pivot ( Count(1) for num_year in (1,2,3,4) )

最终,我们正在找到第一次和第二次购买客户之间的年数。首次购买必须在2016年。

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.