2

私たちのデータベースの 1 つに顧客の生涯価値に関する情報をまとめようとしています。

すべての顧客/取引情報を格納する MS SQL Server データベースがあります。

私の問題は、MS SQL Server (または一般的な SQL) に関してはあまり経験がないことです。AVG ローン数と AVG 収益ベースをプルするデータベースに対してクエリを実行できるようにしたいと考えています。 3 つの基準について:

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 年 1 月以降で、その後 4 か月間のすべての顧客の平均トランザクション数 (承認済みトランザクション) と承認済みトランザクションあたりの平均収益を知りたい場合、どのようにクエリを実行すればよいでしょうか。データベース?

どんな助けでも大歓迎です。

4

2 に答える 2

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' 
于 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 に答える