SQL - 一段时间内的平均记录数

时间:2012-10-31 03:37:47

标签: sql sql-server-2008

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

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

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

1。)如果贷款被“核准”,则计算贷款 2.)如果第一笔贷款(首先由date_created字段标识)在某个'mm / yyyy'之后或之后,则只计算来自customer_id的贷款 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几个月后,我将如何查询数据库?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

像这样的事情(这里和那里可能有一些拼写错误)......

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

从表t中选择customer_id,min(date_created),其中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' 

答案 1 :(得分: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个日历月(例如15日至5月15日)还是直到第4个月的最后一天(1月15日至4月30日),我会更新答案。