Hi dpat08, you mentioned that the report could be per patient or a summary. Dr. Zaccaria provided a summary style query above, but if you are also looking for a per patient report, query #1337 from our query examples page,
https://opendentalsoft.com:1943/ODQuery ... yList.aspx, might be useful to you as well. It has variables at the top for filtering by date or provider, and a third variable for excluding patients with no production.
/*1337 New Patients Report including information from first visit and more*/
/*Like internal report version 17.4*/
/*Query code written/modified: 04/17/2018*/
/*Change dates between the ' ' in format 'YYYY-mm-dd'*/
SET @FromDate='2020-05-01', @ToDate='2020-05-31';
SET @Provs = ''; -- Add Provider Abbreviations separated by a | to filter by, or leave '' to run for all
SET @ExcludeNoProd = 'NO'; -- Change to YES to Exclude patients with no production, NO to include
/*---------------------DO NOT MODIFY BELOW THIS LINE---------------------*/
SET @Provs=(CASE WHEN @Provs="" THEN ".*" ELSE CONCAT('^',REPLACE(@Provs,"|","$|^"),"$") END);
SET @pos = 0;
SELECT @pos:=@pos+1 AS '#',
result.PatNum,
DATE_FORMAT(result.Date,'%m/%d/%Y') AS 'First Visit',
result.Procedures,
result.FirstVisitFee AS '$FirstVisitFee__',
result.$HowMuch__ AS '$Production__',
result.Providers,
result.Carriers AS Carriers,
result.HmPhone AS 'Home Phone',
result.WirelessPhone AS 'Wireless Phone',
result.Referral AS 'Referred From',
result.NextScheduledAppt AS 'Next Scheduled Appt'
FROM (
SELECT dateFirstProc AS 'Date',
patient.PatNum,
patient.LName,
patient.FName,
patient.Preferred,
patient.HmPhone,
patient.WirelessPhone,
patient.Address,
patient.Address2,
patient.City,
patient.State,
patient.Zip,
nextvisit.ApptDate,
GROUP_CONCAT(DISTINCT IF(procedurelog.ProcDate = table1.dateFirstProc,pc.ProcCode,NULL)ORDER BY pc.ProcCode SEPARATOR ', ') AS Procedures,
GROUP_CONCAT(DISTINCT IF(procedurelog.ProcDate = table1.dateFirstProc,(SELECT Abbr FROM provider WHERE ProvNum = procedurelog.ProvNum),NULL)ORDER BY procedurelog.ProvNum SEPARATOR ', ') AS Providers,
SUM(IF(procedurelog.ProcDate = table1.dateFirstProc,(procedurelog.ProcFee*(procedurelog.UnitQty+procedurelog.BaseUnits)),0)) AS FirstVisitFee,
car.Carriers AS Carriers,
CONCAT(referral.LName,IF(referral.FName='','',', '),referral.FName) Referral,
COALESCE(DATE_FORMAT(nextvisit.ApptDate,'%m/%d/%Y'),'None') AS NextScheduledAppt,
SUM(procedurelog.ProcFee*(procedurelog.UnitQty+procedurelog.BaseUnits)) $HowMuch__
FROM (
SELECT PatNum,
MIN(ProcDate) dateFirstProc
FROM procedurelog
INNER JOIN procedurecode ON procedurecode.CodeNum=procedurelog.CodeNum
AND ProcCode NOT IN ('D9986','D9987') /*Do not count missed or canceled appointments*/
WHERE ProcStatus = 2 /*Complete*/
GROUP BY PatNum
HAVING dateFirstProc BETWEEN @FromDate AND @ToDate
)table1
INNER JOIN patient ON table1.PatNum=patient.PatNum
LEFT JOIN procedurelog ON patient.PatNum=procedurelog.PatNum
AND procedurelog.ProcStatus = 2 /*Complete*/
LEFT JOIN procedurecode pc ON procedurelog.CodeNum = pc.CodeNum
AND pc.ProcCode NOT IN ('D9986','D9987')
LEFT JOIN refattach ON patient.PatNum=refattach.PatNum
AND refattach.RefType = 1 /*RefFrom*/
AND refattach.ItemOrder=(
SELECT MIN(ra.ItemOrder)
FROM refattach ra
WHERE ra.PatNum=refattach.PatNum
AND ra.RefType = 1 /*RefFrom*/
)
LEFT JOIN referral ON referral.ReferralNum=refattach.ReferralNum
LEFT JOIN (
SELECT ap.PatNum,MIN(DATE(ap.AptDateTime)) AS ApptDate
FROM appointment ap
WHERE ap.AptStatus = 1 /*Scheduled*/
AND DATE(ap.AptDateTime) >= CURDATE()
GROUP BY ap.PatNum
) nextvisit
ON nextvisit.PatNum=table1.PatNum
INNER JOIN provider pv ON patient.PriProv = pv.ProvNum
LEFT JOIN (
SELECT GROUP_CONCAT(DISTINCT ca.CarrierName SEPARATOR ' | ') Carriers,
pp.PatNum
FROM patplan pp
LEFT JOIN inssub iss ON iss.InsSubNum = pp.InsSubNum
LEFT JOIN insplan ip ON ip.PlanNum = iss.PlanNum
LEFT JOIN carrier ca ON ip.CarrierNum = ca.CarrierNum
GROUP BY pp.PatNum
) car ON car.PatNum = patient.PatNum
WHERE pv.Abbr REGEXP @Provs
GROUP BY patient.PatNum
ORDER BY dateFirstProc,patient.LName,patient.FName
) result
WHERE (CASE WHEN @ExcludeNoProd = 'YES' THEN $HowMuch__ > 0 ELSE TRUE END)