2016-08-15 5 views
0

私のクエリは単純で、多分それを考えているようです。 2つのテーブル、クライアントAとサービスBを考えてみましょう。クライアントテーブルには2つの日付、サービス開始日&サービス終了日があります。今、私たちのKPIは、その月に15日以上私たちと一緒に活動していた各クライアントに、少なくとも1つのサービスを提供したはずです。これは毎月のKPIです。私のインターフェースでは、3ヶ月または6ヶ月のレポート期間を選ぶことができます。必要なレポートは、月ごとにサービスされるクライアントの数です。これは、月と彼らがしている地域でグループ化されますアクティブ期間に基づいてクライアントの適格性を評価してください

クライアントテーブルは

C_ID | Name | SrvStDt | SrvEndDt | ServManager | Region 
    1 | ABCD | 1 Jan 16 | 10 Mar 16 | AAAAAA  | North 
    2 | EDFG | 1 Feb 16 | 15 Aug 16 | BBBBBB  | South 
    3 | YTHG | 1 Mar 16 | 1 Jul 16 | CCCCCC  | East 
    4 | WEFG | 21 Apr 16| 15 May 16 | DDDDDD  | West 
    5 | POIU | 18 May 16| 15 Jul 16 | AAAAAA  | North 
    6 | QWER | 30 Jun 16| --  | BBBBBB  | South 
    7 | CVBH | 21 Jul 16| --  | CCCCCC  | East 
    8 | ASDR | 1 Aug 16 | --  | DDDDDD  | West 
    9 | LKJU | 15 Jan 16| 15 Jul 16 | AAAAAA  | North 
    10 | MNBU | 15 Mar 16| 15 Jul 16 | BBBBBB  | South 

ノート:終了日なしは、クライアントがまだ

サービス表Bアクティブで意味ありません

ID | SrvDAte 
    1 | 15 Jan 16 
    1 | 12 Feb 16 
    1 | 01 Mar 16 
    1 | 10 Mar 16 
    2 | 15 Feb 16 
    2 | 15 Mar 16 
    2 | 31 Mar 16 
    2 | 15 Apr 16 
    2 | 15 May 16 
    2 | 15 Jul 16 
    2 | 15 Aug 16 
    3 | 21 Mar 16 
    3 | 23 Mar 16 
    3 | 23 Apr 16 
    3 | 23 May 16 
    4 | 29 Apr 16 
    5 | 23 May 16 
    6 | 12 Jul 16 
    7 | 23 Jul 16 
    9 | 23 Mar 16 
    9 | 23 Apr 16 
    9 | 23 May 16 
    10 | 19 Mar 16 
    10 | 19 Apr 16 
    10 | 19 May 16 
    10 | 19 Jun 16 
Region | Month | Total Active | Total Serviced 
    North | Apr-16 | XXXX  | XXXX 
    North | May-16 | XXXX  | XXXX 
    North | Jun-16 | XXXX  | XXXX 
    North | Jul-16 | XXXX  | XXXX 
    South | Apr-16 | XXXX  | XXXX 
    South | May-16 | XXXX  | XXXX 
    South | Jun-16 | XXXX  | XXXX 
    South | Jul-16 | XXXX  | XXXX 
    East | Apr-16 | XXXX  | XXXX 
    East | May-16 | XXXX  | XXXX 
    East | Jun-16 | XXXX  | XXXX 
    East | Jul-16 | XXXX  | XXXX 
    West | Apr-16 | XXXX  | XXXX 
    West | May-16 | XXXX  | XXXX 
    West | Jun-16 | XXXX  | XXXX 
    West | Jul-16 | XXXX  | XXXX 

私はすべての月で少なくとも15日間アクティブなクライアントを特定する方法で苦労しています:7月31日結果イム後に次のようになります - 4月1日からの報告については報告期間。 1月〜7月1日など、期間全体にわたって節を設定できますが、それを数か月に分割して毎月評価するにはどうすればよいですか?

私はMS Access VBA & SQLクエリを使用しています。私はこの結果セットを与えるSQLクエリが欲しいです。

+0

を取得頭字語を使用しないでください。実際の意味を使用するか、質問に重要でない場合は削除してください。 – dbmitch

+0

2つのテーブルはどのようにリンクされていますか?Client.C_ID == Service.ID' – dbmitch

+0

Sorry:KPI =重要なパフォーマンスインジケータとはいClient.C_ID =サービス。ID – Keyster2305

答えて

1

報告期間中、少なくとも15日間はアクティブなクライアントを特定する方法に苦労しています。 1月〜7月1日など、期間全体にわたって節を設定できますが、それを数か月に分割して毎月評価するにはどうすればよいですか?これらのカウントを導出する1つの方法は、例えば、

[Numbers] 

    n 
--- 
    0 
    1 
    2 
    3 
... 
998 
999 
をゼロから始まり、開始日と終了日の間の日数の可能な最大数をカバーして、「番号表」を用いることであろう

次に、サンプルデータのための

[TableA] 

C_ID SrvStDt  SrvEndDt 
---- ---------- ---------- 
    1 2016-01-01 2016-01-04 
    2 2016-02-28 2016-03-02 
    3 2016-08-10    

クエリ

SELECT 
    C_ID, 
    DateAdd("d", n, SrvStDt) AS SrvDate 
FROM TableA, Numbers 
WHERE 
    DateAdd("d", n, SrvStDt) <= Nz(SrvEndDt, Date()) 
KPIは何210の

戻り

C_ID SrvDate 
---- ---------- 
    1 2016-01-01 
    1 2016-01-02 
    1 2016-01-03 
    1 2016-01-04 
    2 2016-02-28 
    2 2016-02-29 
    2 2016-03-01 
    2 2016-03-02 
    3 2016-08-10 
    3 2016-08-11 
    3 2016-08-12 
    3 2016-08-13 
    3 2016-08-14 
    3 2016-08-15 

、我々は各年/月の日付をカウントする集計クエリであることをラップした場合(GROUP BY)

SELECT 
    C_ID, 
    Year(SrvDate) AS SrvYear, 
    Month(SrvDate) AS SrvMonth, 
    COUNT(*) AS SrvDays 
FROM 
    (
     SELECT 
      C_ID, 
      DateAdd("d", n, SrvStDt) AS SrvDate 
     FROM TableA, Numbers 
     WHERE 
      DateAdd("d", n, SrvStDt) <= Nz(SrvEndDt, Date()) 
    ) 
GROUP BY 
    C_ID, 
    Year(SrvDate), 
    Month(SrvDate) 

我々は

C_ID SrvYear SrvMonth SrvDays 
---- ------- -------- ------- 
    1  2016   1  4 
    2  2016   2  2 
    2  2016   3  2 
    3  2016   8  6 
関連する問題