0

1 か月全体の毎日の平均が必要ですが、秘訣は、すべてのクライアントの開始日と終了日が異なることです。たとえば、一部のクライアントは、月の一部のみ登録されます。クライアント A が 4/3/13 から 4/8/13 に登録され、クライアント B が 4/6 から 4/30 に登録され、クライアント C が 4/1 から 5/1 に登録されたとします。どうすればこれを達成できますか? これは、すべてのクライアントが 1 か月間登録されていると想定しているため、非常に低いカウントを返す現在のコードです。

if exists (
    select  * from tempdb.dbo.sysobjects o    where o.xtype in ('U')  and o.id = object_id(N'tempdb..#enrollments_PreviousMonth2')
) DROP TABLE #enrollments_PreviousMonth2;

Select
    people_id,
    program_modifier,
    program_modifier_id,
    DATEADD(dd, 0, DATEDIFF(dd, 0, actual_date)) as enroll_midnight_date,
    actual_date as enroll_start_date,
    end_date as enroll_end_date

INTO #enrollments_PreviousMonth2 
From
 program_modifier_enrollment_view pmev with(nolock) 
Where
program_modifier_id = 'E1AA7A36-0500-4BAE-A0AA-D9E0BC91A6F3' and
actual_date  <= '4/30/13' and (end_date >= '4/1/13' or end_date is null)

;with cte as (
select cast(enroll_start_date as date) as actual_date,
    count(people_id) cnt
From #enrollments_PreviousMonth2 en
left join Calendar c on en.enroll_midnight_date = c.dt
where program_modifier_id = 'E1AA7A36-0500-4BAE-A0AA-D9E0BC91A6F3' 
    AND enroll_start_date  <= '4/30/13' and (enroll_end_date >= '4/1/13' or enroll_end_date is null)
Group by enroll_start_date--, enroll_end_date, program_modifier_id, program_modifier
)
select  
sum(cnt*1.0)
from cte

ただし、ソリューションに CURSOR を使用しないことを好みます。

4

0 に答える 0