Files
medicines-snowflake/02_prescribing_analysis/practice_level_bnf_prescribing_summary.sql
T
Andrew Charlwood 647d1bfa7f initial commit
2026-05-12 16:40:03 +01:00

80 lines
2.5 KiB
SQL

/*
Practice-level prescribing summary by BNF prefix
================================================
Purpose:
Produce a compact practice/month summary for prescribing under a BNF prefix.
Good first query for:
- "How much prescribing activity is there for this BNF section?"
- "Which practices have the most patients/items/cost for this medicine area?"
- A simple numerator for charts or practice packs.
*/
SET START_DATE = '2025-04-01';
SET END_DATE = '2026-03-31';
SET BNF_PREFIX = '0403';
WITH practices AS (
-- Default reporting geography: active Norfolk and Suffolk parent GP practices.
SELECT DISTINCT
"OrganisationCode" AS "PracticeCode",
"OrganisationName" AS "PracticeName",
"PCNName",
"PlaceName",
"AllianceName"
FROM DATA_HUB.DWH."DimOrganisationAndSite"
WHERE "OrganisationSubType" = 'GP Practice'
AND "IsSiteActive" = 'Yes'
AND "IsSiteNorfolkAndSuffolk" = 'Yes'
AND "SiteCode" = "OrganisationCode"
),
prescribing AS (
-- Aggregate after joining to the medicine dimension so BNF matching is dm+d-backed.
SELECT
DATE_TRUNC('MONTH', rx."DateMedicationStart")::DATE AS "MonthStartDate",
p."PracticeCode",
p."PracticeName",
p."PCNName",
p."PlaceName",
p."AllianceName",
med."BNFParagraphCode",
COUNT(DISTINCT rx."PersonKey") AS "Patients",
COUNT(*) AS "PrescriptionRows",
SUM(TRY_CAST(rx."Quantity" AS FLOAT)) AS "TotalQuantity",
SUM(rx."EstPrice") AS "EstimatedCost"
FROM REPORTING_DATASETS_ICB.SCRATCHPAD."MEDS__UnifiedPrescribingTable" rx
INNER JOIN DATA_HUB.DWH."DimMedicineAndDevice" med
ON rx."SNOMEDCode" = med."ProductSnomedCode"
AND med."BNFCode" LIKE $BNF_PREFIX || '%'
INNER JOIN practices p
ON rx."CurrentGeneralPractice" = p."PracticeCode"
WHERE rx."DateMedicationStart" BETWEEN $START_DATE AND $END_DATE
AND rx."PersonKey" IS NOT NULL
GROUP BY
DATE_TRUNC('MONTH', rx."DateMedicationStart")::DATE,
p."PracticeCode",
p."PracticeName",
p."PCNName",
p."PlaceName",
p."AllianceName",
med."BNFParagraphCode"
)
SELECT
"MonthStartDate",
"PracticeCode",
"PracticeName",
"PCNName",
"PlaceName",
"AllianceName",
"BNFParagraphCode",
"Patients",
"PrescriptionRows",
"TotalQuantity",
"EstimatedCost"
FROM prescribing
ORDER BY
"MonthStartDate",
"PracticeName",
"BNFParagraphCode";