Skip to content

Commit 6f2a838

Browse files
authored
Update SQL script to automatically reflect current active definition
1 parent ab4beb8 commit 6f2a838

1 file changed

Lines changed: 45 additions & 58 deletions

File tree

ActiveRecordsOverTime.sql

Lines changed: 45 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,51 @@
11
-- Pckgd
22
-- Title: Active Records Over Time
3-
-- Description: Tracks the number of active records per year based on 2025 definition of active.
3+
-- Description: Tracks the number of active records per year based on CURRENT definition of active.
44
-- Updates from: GitHub/TenthPres/TouchPointScripts/ActiveRecordsOverTime.sql
55
-- Author: James at Tenth
66

7+
WITH FirstActivity AS (
8+
SELECT MIN(ActivityDate) AS FirstDate
9+
FROM (
10+
SELECT MIN(ContributionDate) AS ActivityDate
11+
FROM dbo.Contribution
712

8-
WITH FamiliesGiving AS (SELECT YEAR(cc.ContributionDate) AS ActivityYear, p.FamilyId
9-
FROM dbo.Contribution cc WITH (NOLOCK)
10-
JOIN dbo.People p WITH (NOLOCK) ON p.PeopleId = cc.PeopleId
11-
WHERE cc.ContributionTypeId IN (1, 5, 8, 9, 10, 20)
12-
AND p.IsDeceased = 0
13-
GROUP BY YEAR(cc.ContributionDate), p.FamilyId
14-
HAVING COUNT(*) >= 1),
15-
PeopleFromGiving AS (SELECT fg.ActivityYear, p.PeopleId
16-
FROM FamiliesGiving fg
17-
JOIN dbo.People p WITH (NOLOCK) ON p.FamilyId = fg.FamilyId
18-
WHERE p.IsDeceased = 0),
19-
Attenders AS (SELECT YEAR(a.MeetingDate) AS ActivityYear, a.PeopleId
20-
FROM dbo.Attend a WITH (NOLOCK)
21-
JOIN dbo.People p WITH (NOLOCK) ON p.PeopleId = a.PeopleId
22-
WHERE a.AttendanceFlag = 1
23-
AND p.IsDeceased = 0
24-
GROUP BY YEAR(a.MeetingDate), a.PeopleId
25-
HAVING COUNT(*) >= 2),
26-
LegacyRegCount AS (SELECT YEAR(rd.Stamp) AS ActivityYear, rd.UserPeopleId AS PeopleId, COUNT(*) AS rCount
27-
FROM dbo.RegistrationData rd WITH (NOLOCK)
28-
JOIN dbo.People p WITH (NOLOCK) ON rd.UserPeopleId = p.PeopleId
29-
WHERE rd.UserPeopleId IS NOT NULL
30-
AND rd.Completed = 1
31-
AND p.IsDeceased = 0
32-
GROUP BY YEAR(rd.Stamp), rd.UserPeopleId),
33-
FormsRegCount AS (SELECT YEAR(rp.CompletedDate) AS ActivityYear, rp.PeopleId, COUNT(*) AS rCount
34-
FROM dbo.RegPeople rp WITH (NOLOCK)
35-
JOIN dbo.People p WITH (NOLOCK) ON rp.PeopleId = p.PeopleId
36-
WHERE rp.PeopleId IS NOT NULL
37-
AND rp.[Status] = 2
38-
AND p.IsDeceased = 0
39-
GROUP BY YEAR(rp.CompletedDate), rp.PeopleId),
40-
RegistrationCount AS (SELECT ActivityYear, PeopleId, SUM(rCount) AS rCount
41-
FROM (SELECT ActivityYear, PeopleId, rCount
42-
FROM LegacyRegCount
43-
UNION ALL
44-
SELECT ActivityYear, PeopleId, rCount
45-
FROM FormsRegCount) r
46-
GROUP BY ActivityYear, PeopleId),
47-
Registrants AS (SELECT ActivityYear, PeopleId
48-
FROM RegistrationCount
49-
WHERE rCount >= 2),
50-
PPL AS (SELECT ActivityYear, PeopleId
51-
FROM PeopleFromGiving
52-
UNION ALL
53-
SELECT ActivityYear, PeopleId
54-
FROM Attenders
55-
UNION ALL
56-
SELECT ActivityYear, PeopleId
57-
FROM Registrants),
58-
DistinctPPL AS (SELECT ActivityYear, PeopleId
59-
FROM PPL
60-
GROUP BY ActivityYear, PeopleId)
61-
SELECT ActivityYear, COUNT(*) AS ActiveCount
62-
FROM DistinctPPL
63-
GROUP BY ActivityYear
64-
ORDER BY ActivityYear DESC
13+
UNION ALL
14+
15+
SELECT MIN(MeetingDate)
16+
FROM dbo.Attend
17+
18+
UNION ALL
19+
20+
SELECT MIN(Stamp)
21+
FROM dbo.RegistrationData
22+
23+
UNION ALL
24+
25+
SELECT MIN(CompletedDate)
26+
FROM dbo.RegPeople
27+
) x
28+
),
29+
Years AS (
30+
SELECT YEAR(FirstDate) AS ActivityYear
31+
FROM FirstActivity
32+
33+
UNION ALL
34+
35+
SELECT ActivityYear + 1
36+
FROM Years
37+
WHERE ActivityYear + 1 <= YEAR(GETDATE())
38+
)
39+
SELECT
40+
y.ActivityYear,
41+
DATEFROMPARTS(y.ActivityYear, 12, 31) AS AsOfDate,
42+
COUNT(ar.PeopleId) AS ActiveCount
43+
FROM Years y
44+
CROSS APPLY dbo.ActiveRecords(
45+
DATEFROMPARTS(y.ActivityYear, 12, 31)
46+
) ar
47+
GROUP BY
48+
y.ActivityYear
49+
ORDER BY
50+
y.ActivityYear DESC
51+
OPTION (MAXRECURSION 0);

0 commit comments

Comments
 (0)