Overzicht geen verbruik afgelopen maanden

Status
Niet open voor verdere reacties.

RolandPricken

Gebruiker
Lid geworden
17 sep 2010
Berichten
49
Hallo,

Ik wil graag een overzicht krijgen van artikelen waar de afgelopen 2 maanden geen verbruik op is geweest weergeven.
Hoe krijg ik dit voor elkaar?

Het lukt me natuurlijk om een overzicht te krijgen van artikelen waar de afgelopen 2 maanden wel verbruik op is geweest, etc.
Ik heb nu iets in de trend van: (dbo.INVENTTRANS.DATEEXPECTED >= { fn NOW() } - 60) AND (dbo.INVENTTRANS.DATEEXPECTED < { fn NOW() })
Zo krijg ik (met een group by) een overzicht van alle artikelen waar in de afgelopen 2 maanden verbruik op is geweest. Ik wil het dus andersom, een overzicht van alle artikelen waar in de afgelopen maanden GEEN verbruik op is geweest.

Wie kan me helpen?

Alvast bedankt!
 
Dat is afhankelijk van af er andere variabelen zijn.

Als alles een dateexpected heeft zijn de artikelen die je zoekt:

dbo.INVENTTRANS.DATEEXPECTED < { fn NOW() } - 60)

wat is er mis met deze simpele oplossing?
 
Het zijn volgens bovenstaande methode in je eerste post ook alle items waar 60 dagen geen activiteit op is geweest.

Als alle artikelen die je niet wilt wordt gerepresenteerd door

>= nu-60

worden alle artikelen die je wel wilt gerepresenteerd door

< nu-60

Dat is simpele logica. Daarom vroeg ik me ook al af waar de "catch" zit in goed Engels.
 
Bij alle items wordt inderdaad een datum opgeslagen als deze verkocht wordt, 3 stuks op een dag verkocht is 3 regels.

Als ik de qry als volgt opstel, krijg ik een overzicht van datums waarop items verkocht zijn, tussen nu en 60 dagen geleden.
Code:
SELECT     TOP (100) PERCENT dbo.INVENTTABLE.ITEMID, dbo.INVENTTABLE.ITEMNAME, dbo.INVENTTRANS.DATEEXPECTED
FROM         dbo.INVENTTABLE INNER JOIN
                      dbo.INVENTTRANS ON dbo.INVENTTABLE.ITEMID = dbo.INVENTTRANS.ITEMID AND dbo.INVENTTABLE.DATAAREAID = dbo.INVENTTRANS.DATAAREAID INNER JOIN
                      dbo.INVENTDIM ON dbo.INVENTTRANS.DATAAREAID = dbo.INVENTDIM.DATAAREAID AND dbo.INVENTTRANS.INVENTDIMID = dbo.INVENTDIM.INVENTDIMID
WHERE     (dbo.INVENTTABLE.DATAAREAID = 'tec') AND (dbo.INVENTTRANS.DATEEXPECTED >= { fn NOW() } - 60) AND (dbo.INVENTTRANS.DATEEXPECTED < { fn NOW() })

Stel ik hem op zoals je aangeeft, dan krijg ik alle regels van verkochte items , vanaf 60 dagen geleden.

Code:
SELECT     TOP (100) PERCENT dbo.INVENTTABLE.ITEMID, dbo.INVENTTABLE.ITEMNAME, dbo.INVENTTRANS.DATEEXPECTED
FROM         dbo.INVENTTABLE INNER JOIN
                      dbo.INVENTTRANS ON dbo.INVENTTABLE.ITEMID = dbo.INVENTTRANS.ITEMID AND dbo.INVENTTABLE.DATAAREAID = dbo.INVENTTRANS.DATAAREAID INNER JOIN
                      dbo.INVENTDIM ON dbo.INVENTTRANS.DATAAREAID = dbo.INVENTDIM.DATAAREAID AND dbo.INVENTTRANS.INVENTDIMID = dbo.INVENTDIM.INVENTDIMID
WHERE     (dbo.INVENTTABLE.DATAAREAID = 'tec') AND (dbo.INVENTTRANS.DATEEXPECTED < { fn NOW() } - 60)
ORDER BY dbo.INVENTTABLE.ITEMID, dbo.INVENTTRANS.DATEEXPECTED

Ik wil echter een overzicht van items die sinds 2 maanden geen verbruik hebben gehad, dus geen regel meer in de dateexpected kolom in de afgelopen 2 maanden, nu geeft de 2de qry deze gewoon niet weer, terwijl er wel transacties zijn geweest.
 
je kunt je tabel met "NOT EXISTS" inverteren via een subquery. Andere opties zijn een outer join en "NOT IN". Hoewel de laatste optie veruit de laagste performance heeft in de meeste gevallen.

Wat je dan krijgt is alles wat niet in je originele query zit. Pas wel op met je "TOP 100". Als er meer dan 100 items zijn en je limiteert ze op deze manier krijg je valse resultaten in je geïnverteerde tabel. Omdraaien van je tabel vraagt zeer veel performance en moet normaal je laatste keus zijn.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan