Brgrænse data som undersøges
Jeg har en forespørgsel som kontrollere om der er dubletter af fakturaer.Kontrollen fortages på CVR-nr. og Fakturanr. - altså om vi fra samme leverandør har modtaget en faktura med samme nummer.
Den nuværende SQL gennemløber alle poster hver gang den køres (der er over 200.000 fakturaer og det tager nu omkring 3 timer - hænger sammen med hardware og datamængde (ja er der andre faktorer :-))
Jeg vil gerne at man kan angive et fakturaID (et fortløbende unikt nr. som tildeles i forbindelse med indlæsning af fakturaer) og så kontrolleres kun nyindlæste fakturaer om der er andre (i hele databasen) som er ens = dubletter.
Det burde begrænse eksekveringstiden betydeligt - da der ikke skal gennemgås over 200.000 fakturaer, men kun omkring 2.500 hver gang (får omkring 400 fakturaer om dagen).
Her er SQL'en:
select distinct
case a.TYPE -- recordtype (0+1 = F = faktura 2+3 =
K = Kreditnota
when 0 then 'F'
when 1 then 'F'
when 2 then 'K'
when 3 then 'K'
else '?'
end TYPE,
a.INVOICE_ID,
a.CVRNR,
a.SELLERINVOICENO,
a.INVOICEDATE,
a.STATUS,
case a.STATUS
when 'A' then 'A - Afventer artskontering og varemodtagelse'
when 'B' then 'B - Afventer artskontering'
when 'C' then 'C - Afventer godkendelse og varemodtagelse'
when 'D' then 'D - Afventer godkendelse'
when 'E' then 'E - Afventer varemodtagelse'
when 'F' then 'F - Færdigbehandlet'
when 'G' then 'G - Færdigbehandlet. Er overført'
when 'H' then 'H - Afventer fejlbehandling og varemodtagelse'
when 'I' then 'I - Afventer fejlbehandling'
when 'Z' then 'G - Færdigbehandlet. Er overført - ARKIVERET'
when 'X' then 'X - Slettemarkeret'
else a.status
end STATUS_TEKST,
a.TOBEPAIDTOTALAMOUNT,
a.DELAE_ID,
c.LASTNAME
from
RIGETA.XINVOICE a,
RIGETA.ADDRESS c
WHERE
a.INVOICE_ID IN (SELECT
d.INVOICE_ID
from
RIGETA.XINVOICE d
WHERE
d.status !='X'
)
AND
EXISTS (
SELECT
*
from
RIGETA.XINVOICE b
where
b.INVOICE_ID IN (
SELECT
c.INVOICE_ID
from
RIGETA.XINVOICE c
WHERE
c.status !='X'
)
AND
a.CVRNR = b.CVRNR
and
a.SELLERINVOICENO = b.SELLERINVOICENO
and
a.INVOICE_ID <> b.INVOICE_ID
and
c.MEMBER_ID = a.DELAE_ID
and
c.STATUS = 'P'
)
ORDER BY
a.CVRNR,
a.SELLERINVOICENO,
a.INVOICE_ID
Bare så der ikke er tvivl er det INVOICE_ID som der skal kunne angives en "undersøg fra værdi".
Håber i kan hjælpe!