I have written a query which does what I require bt I was wondering if there is a more efficient way to run this as it is taking hours to bring back a few hundred rows and it should run to about 160k records I have added subquery to create the previous year count which is causing the performance issues
SELECT
main.date,
main.course_group,
main.StudyModename,
main.campusname,
main.course_name,
main.CAS_Required,
main.StartMonth,
main.StartYear,
main.DepositPaid,
main.current_year_count,
(SELECT COUNT(DISTINCT sub.appidjoin)
FROM [report].[YoyNumbers] sub
LEFT JOIN [dbo].[pbi_applicationattributes] sub_b ON sub.appidjoin = sub_b.appidjoin
WHERE sub.ProductStartDate >= '2024-08-01'
AND sub.date <= main.date
AND sub_b.course_group = main.course_group
AND sub_b.StudyModename = main.StudyModename
AND sub_b.campusname = main.campusname
AND sub_b.course_name = main.course_name
AND sub_b.CAS_Required = main.CAS_Required
AND YEAR(sub.ProductStartDate) = main.StartYear
AND CASE
WHEN MONTH(sub.ProductStartDate) IN (1,2,3) THEN 'Winter'
WHEN MONTH(sub.ProductStartDate) IN (4,5,6,7) THEN 'Summer'
WHEN MONTH(sub.ProductStartDate) IN (8,9,10,11,12) THEN 'Autumn'
ELSE NULL
END = main.StartMonth
AND
CASE WHEN sub_b.CAS_Required = 'no' THEN 'No'
WHEN sub_b.VisaPaymentMadeDate IS NOT NULL THEN 'Yes'
ELSE 'No'
END = main.DepositPaid