2

我正在尝试在我们的一个数据库中为客户编制一些终身价值信息。

我们有一个 MS SQL Server 数据库,用于存储我们所有的客户/交易信息。

我的问题是我在 MS SQL Server(或一般的 SQL)方面没有太多经验 - 我希望能够对提取 AVG 贷款数量和基于 AVG 收入的数据库运行查询根据三个标准:

1.) 如果贷款被“批准”,则计入贷款 2.) 来自 customer_id 的贷款仅在第一笔贷款(首先由 date_created 字段标识)在某个 'mm/yyyy' 或之后才计算在内 3.) 我是能够指定在第一个“mm/yyyy”之后多少个月来统计要包含在 AVG 中的贷款/收入数量

这是数据库的样子:

customer_id   | loan_status | date_created      | revenue
111       | 'approved'  | 2010-06-20 17:17:09   | 100.00
222       | 'approved'  | 2010-06-21 09:54:43   | 255.12
333       | 'denied'    | 2011-06-21 12:47:30   | NULL
333       | 'approved'  | 2011-06-21 12:47:20   | 56.87
222       | 'denied'    | 2011-06-21 09:54:48   | NULL
222       | 'approved'  | 2011-06-21 09:54:18   | 50.00
111       | 'approved'  | 2011-06-20 17:17:23   | 100.00
... loads' of records ...
555       | 'approved'  | 2012-01-02 09:08:42   | 24.70
111       | 'denied'    | 2012-01-05 02:10:36   | NULL
666       | 'denied'    | 2012-02-05 03:31:16   | NULL
555       | 'approved'  | 2012-02-17 09:32:26   | 197.10
777       | 'approved'  | 2012-04-03 18:28:45   | 300.50
777       | 'approved'  | 2012-06-28 02:42:01   | 201.80
555       | 'approved'  | 2012-06-21 22:16:59   | 10.00
666       | 'approved'  | 2012-09-30 01:17:20   | 50.00

如果我想查找 2012-01 年/之后的所有客户的平均交易数(已批准的交易)和每笔已批准交易的平均收入以及在那之后的 4 个月内,我将如何查询数据库?

任何帮助是极大的赞赏。

4

2 回答 2

0

像这样的东西(这里和那里可能有一些错别字)......

您可以先计算最低贷款日期:

select customer_id, min(date_created) from table t where loan_status = 'approved' group by customer_id

然后你可以加入它:

select customer_id,  count(date_created), avg(revenue) from table t 
join (
select customer_id,  min(date_created) as min_date from table t where loan_status = 'approved' group by customer_id ) s 
on t.customer_id = s.customer_id 
where t.date_created between s.min_date and DATEADD(month, 4, s.min_date) and t.loan_status = 'approved' 
于 2012-10-31T03:54:02.840 回答
0

重命名tbl为您的表名。
以格式指定日期YYYYMMDD

select customer_id, AVG(revenue) average_revenue
from
(
    select customer_id
    from tbl
    group by customer_id
    having min(date_created) >= '20120101'
) fl
join tbl t on t.customer_id = fl.customer_id
where t.loan_status = 'approved'
  and date_created < '20120501' -- NOT including May the first, so Jan through Apr (4 months)

如果您的意思是每个客户第一次贷款后的 4 个月,请给我留言,说明是 4 个日历月(例如 1 月 15 日至 5 月 15 日)还是第 4 个月的最后一天(1 月 15 日至 4 月 30 日) ),我会更新答案。

于 2012-10-31T03:55:07.537 回答