You were very close. I realized that you really need the MIN() TC date, which is more than each setup date for this account number if they are 30 days or less away.
So you need to group by installation dates from your result set, except for WorkOrderNumber . Sort of:
SELECT a.AccountNumber, MIN(a.scheduleddate) TCDate, b.scheduleddate INDate FROM ( SELECT WorkOrderNumber, ScheduledDate, JobType, AccountNumber FROM workorders WHERE JobType = 'TC' ) a INNER JOIN ( SELECT WorkOrderNumber, ScheduledDate, JobType, AccountNumber FROM workorders WHERE JobType = 'IN' ) b ON a.AccountNumber = b.AccountNumber WHERE b.ScheduledDate < a.ScheduledDate AND DATEDIFF(DAY, b.ScheduledDate, a.ScheduledDate) <= 30 GROUP BY a.AccountNumber, b.AccountNumber, b.ScheduledDate
This applies to dates and AccountNumber s, but you still need WorkOrderNumber s, so I went into the workorders table workorders , once for each type.
NOTE. I assume that each work order has a unique date for each account number. So, if you have work order 1 ("TC") for account 1 done on "1/1/2015", and you also have work order 2 ("TC") for account 1 done on " 1/1/2015 ", then I canβt guarantee that you will have the correct WorkOrderNumber in your result set.
My last request looked like this:
SELECT aggdata.AccountNumber, inst.workordernumber OriginalWorkOrderNumber, inst.JobType OriginalJobType, inst.ScheduledDate OriginalScheduledDate, tc.WorkOrderNumber NewWorkOrderNumber, tc.JobType NewJobType, tc.ScheduledDate NewScheduledDate FROM ( SELECT a.AccountNumber, MIN(a.scheduleddate) TCDate, b.scheduleddate INDate FROM ( SELECT WorkOrderNumber, ScheduledDate, JobType, AccountNumber FROM workorders WHERE JobType = 'TC' ) a INNER JOIN ( SELECT WorkOrderNumber, ScheduledDate, JobType, AccountNumber FROM workorders WHERE JobType = 'IN' ) b ON a.AccountNumber = b.AccountNumber WHERE b.ScheduledDate < a.ScheduledDate AND DATEDIFF(DAY, b.ScheduledDate, a.ScheduledDate) <= 30 GROUP BY a.AccountNumber, b.AccountNumber, b.ScheduledDate ) aggdata LEFT OUTER JOIN workorders tc ON aggdata.TCDate = tc.ScheduledDate AND aggdata.AccountNumber = tc.AccountNumber AND tc.JobType = 'TC' LEFT OUTER JOIN workorders inst ON aggdata.INDate = inst.ScheduledDate AND aggdata.AccountNumber = inst.AccountNumber AND inst.JobType = 'IN'