SQL Поиск информации о предыдущей записи - PullRequest
1 голос
/ 28 января 2020

Вот моя ситуация. У меня есть ряд претензий на человека. Иногда мы получаем дубликаты претензий, которым присваивается код ошибки DUP и которые отклоняются с нулевой суммой в долларах. То, что я пытаюсь сделать, - это просмотреть исходные претензии и сумму счета. Если дубликат и первоначальная претензия представляют собой одни и те же единицы и сумму счета, я намерен их игнорировать (или, по крайней мере, пометить как НЕ потенциальный повторный счет). Если единицы и / или сумма выставления счета отличаются, то это требование будет помечено как потенциальный повторный счет.

У меня есть функция, которая правильно находит значение первичного ключа исходного требования, и базовый запрос выполняется менее чем за секунду. Однако, когда я пытаюсь связать этот набор данных с таблицами, это приводит к тому, что мое время выполнения становится бесполезным. Чего я не понимаю, так это почему одна функция работает так быстро, но попытка связать ее так сильно утомляет, мы говорим о наборе данных 140i sh заявок за год деятельности.

Если бы кто-то мог предложить какое-то понимание или иметь лучший способ выполнить sh, я был бы обязан.

SELECT pre.*
--, st.unitsofservice as OrigUnits
--I only include the line above if the link to the servicetransaction table on the last line of the query is active

FROM
    (
    SELECT Sub.*--, 
        ,dbo.cf_DuplicateServiceSTID(sub.servicetransactionid) as PaidSvc
--the line above is the function returning the primary key value for the original claim
    FROM 
        (
        SELECT Pre.servicetransactionID, 
            st.servicedate, st.individualid, st.agencyid, st.servicecode, st.placeofserviceid, st.unitsofservice,
            dbo.sortmodifiers(st.modifiercodeid, st.modifiercodeid2, st.modifiercodeid3, st.modifiercodeid4) as Modifiers, 
            bd.billedamount,
            a.upi,
            b.name
        FROM (select pmt.servicetransactionid
                from pmtadjdetail pmt
                where substring(pmt.reasoncodes,1,5) = 'DUP') Pre
            JOIN servicetransaction st on pre.servicetransactionid = st.servicetransactionid
            join billdetail bd on st.servicetransactionid = bd.servicetransactionid
            join agency a on st.agencyid = a.agencyid
            join business b on a.businessid = b.businessid
        where st.servicedate between @StartDate and @EndDate
            and st.agencyid = iif(@AgencyID is null, st.agencyid, @AgencyID)
        ) Sub
        join individual i on sub.individualid = i.individualid
        join enrollment e on sub.individualid = e.individualid
    WHERE e.enrollmenttype <> 'p'
    ) Pre
--join servicetransaction st on pre.paidsvc = st.servicetransactionid
--If I remove the comment from the line above my run time increases to the point of uselessness
...