SQL Найти учетные записи без активности сбора за последние 45 дней - PullRequest
2 голосов
/ 21 марта 2012

У меня есть программное обеспечение для управления практикой, которое хранит различную активность в разных таблицах. ПЕРЕЧИСЛЕНО НИЖЕ. Цель, которую я пытаюсь достичь, состоит в том, чтобы найти учетные записи, которые имеют сальдо, которые являются неактивными или не имели какой-либо активности в течение последних 30 дней. Типы деятельности включают в себя подачу претензий, платежи и заметки ГК. Я достигаю этого с пятью запросами и функцией Vlookup в exel. Однако я хотел бы сделать это чисто с одним запросом SQL. Является ли это возможным. Ниже приведены пять запросов, которые я сейчас использую.

SELECT xrxTrnLgr.PatId, xrxTrnLgr.Balance, 
FROM xrxTrnLgr
WHERE (xrxTrnLgr.Balance>$.01)
ORDER BY xrxTrnLgr.PatId  

Этот запрос предназначен для получения пациентов с балансом

SELECT xrxPat.PatId, xrxPat.Coverage, xrxPat.DctId, xrxPat.EntryDate
FROM  xrxPat
WHERE (xrxPat.EntryDate>{ts '2008-01-01 00:00:00'})
ORDER BY xrxPat.PatId

Этот запрос для получения идентификатора доктора

SELECT RecNo, xrxPatNotes.PatId, xrxPatNotes.NoteDate, xrxPatNotes.UserId
FROM xrxPatNotes INNER JOIN
(SELECT xrxPatNotes.PatId, Max (NoteDate) as LastDate
FROM xrxPatNotes
GROUP BY PatId) as B
ON xrxPatNotes.PatId = B.PatId
AND xrxPatNotes.NoteDate = B.LastDate

Этот запрос предназначен для получения самой последней заметки ГК

SELECT xrxTrnicf.PatId,  xrxTrnicf.UserId  ,xrxTrnicf.PostDate
FROM   xrxTrnicf INNER JOIN
(SELECT xrxTrnicf.PatId, Max (PostDate) as LastDate
FROM  xrxTrnicf
GROUP BY PatId) as B
ON xrxTrnicf.PatId = B.PatId
AND xrxTrnicf.PostDate = B.LastDat

Этот запрос должен получить самую последнюю отправленную заявку

SELECT xrxTrnpay.PatId,  xrxTrnpay.UserId  ,xrxTrnpay.PostDate
FROM   xrxTrnpay INNER JOIN
(SELECT xrxTrnpay.PatId, Max (PostDate) as LastDate
FROM  xrxTrnpay
GROUP BY PatId) as B
ON xrxTrnpay.PatId = B.PatId
AND xrxTrnpay.PostDate = B.LastDate

Этот запрос для получения последней оплаты

Внутри exel я тогда ВЛООКУП всех ценностей и вычитаю из сегодняшнего Затем я создаю столбец, чтобы получить минимальное значение.

Если бы кто-нибудь мог помочь мне хотя бы объединить запросы SQL в один запрос, я был бы очень признателен.

Спасибо

1 Ответ

1 голос
/ 21 марта 2012

Вы можете использовать 5-полосный союз.Это довольно многословно, но это бы сработало.Обратите внимание, что он по-прежнему использует пять вариантов выбора, поэтому он не будет более эффективным (на самом деле, я подозреваю, что он может быть менее эффективным).Было бы просто разрешить один запрос с одним набором результатов:

SELECT PatId,
  'xrxTrnLgr' AS tablename,
  'Balance' AS key1, Balance AS value1,
  NULL AS key2, NULL AS value2,
  NULL AS key3, NULL AS value3
FROM xrxTrnLgr
WHERE (xrxTrnLgr.Balance>$.01)
UNION ALL
SELECT PatId,
  'xrxPat' AS tablename,
  'Coverage' AS key1, Coverage AS value1,
  'DctId' AS key2, DctId AS value2,
  'EntryDate' AS key3, EntryDate AS value3
FROM  xrxPat
WHERE (xrxPat.EntryDate>{ts '2008-01-01 00:00:00'})
UNION ALL
SELECT PatId,
  'xrxPatNotes' AS tablename,
  'RecNo' AS key1, RecNo AS value1,
  'NoteDate' AS key2, NoteDate AS value2,
  'UserId' AS key3, UserId AS value3
FROM xrxPatNotes INNER JOIN
(SELECT xrxPatNotes.PatId, Max (NoteDate) as LastDate
FROM xrxPatNotes
GROUP BY PatId) as B
ON xrxPatNotes.PatId = B.PatId
AND xrxPatNotes.NoteDate = B.LastDate
UNION ALL
SELECT PatId,
  'xrxTrnicf' AS tablename,
  'UserId' AS key1, UserId AS value1,
  'PostDate' AS key2, PostDate AS value2,
  NULL AS key3, NULL AS value3
FROM   xrxTrnicf INNER JOIN
(SELECT xrxTrnicf.PatId, Max (PostDate) as LastDate
FROM  xrxTrnicf
GROUP BY PatId) as B
ON xrxTrnicf.PatId = B.PatId
AND xrxTrnicf.PostDate = B.LastDat
UNION ALL
SELECT PatId,
  'xrxTrnpay' AS tablename,
  'UserId' AS key1, UserId AS value1,
  'PostDate' AS key2, PostDate AS value2,
  NULL AS key3, NULL AS value3
FROM   xrxTrnpay INNER JOIN
(SELECT xrxTrnpay.PatId, Max (PostDate) as LastDate
FROM  xrxTrnpay
GROUP BY PatId) as B
ON xrxTrnpay.PatId = B.PatId
AND xrxTrnpay.PostDate = B.LastDate
ORDER BY PatId  

Это вернет один набор результатов со столбцами (tablename, PatId, key1, value1, key2, value2, key3, value3).Результат tablename скажет вам, как интерпретировать результаты пары ключ / значение.

...