wederom prijstabel

Status
Niet open voor verdere reacties.

VendClasicc

Gebruiker
Lid geworden
25 feb 2015
Berichten
68
Hoi allemaal!

Afgelopen periode heb ik een geweldige database opgezet met behulp van voornamelijk Octafish.
Die ik bij deze hiervoor wil bedanken. Hij heeft me onder andere geleerd hoe je met behulp van een cartetisch product mooie dingen kunt maken !

Nu loop ik in een ander onderdeel tegen een soortgelijk probleempje aan en vroeg me af of jullie een handige methode weten.

Elke maand verschijnt er in de markt een lijst met ongeveer 30000 producten die de prijzen aangeven van in die maand, het zijn allemaal unieke producten.
Nu wil ik een prijslijst van deze markt data maken met een start en begin datum. Om te starten heb ik dit gedaan door alle data / per maand onder elkaar te zetten. Echter zoals jullie al snappen zorgt dit ervoor dat ik bijna een miljoen records in excel heb, wat de snelheid van mijn database model enorm vertraagd.
Het tweede punt is dat de prijzen van deze producten een enkele keer omhoog/omlaag gaan. Nu vroeg ik me af en volgens mij heb ik al eens zoiets gevraagd, hoe ik deze data van 1 miljoen records kan samenvatten zodat ik een record voor 1 prijs per product heb voor een bepaalde periode ipv voor elke maand een record met dubbele gegevens.

Ik heb een excel bestand toegevoegd met daarin een voorbeeld.

Ik hoop dat iemand hier me mee kan helpen :P!

Mvg Vendclasicc.
 
Laatst bewerkt:
Ik neem aan dat je de data in de db hebt staan, en niet in Excel?
 
Yes ik heb de data in access geimporteerd vanuit excel. Elke maand komt die data binnen, dus heb eerst alles in excel geplakt onder elkaar.
 
Ik zou het importsysteem toch anders opzetten. In je database heb je alleen een nieuw record nodig als de prijs verandert. Anders kun je volstaan met het bijwerken van de einddatum. En daar zou ik de queries dus op bouwen.
 
He octafish, thx voor je reactie.
Heb je hier een voorbeeldje/handleiding/methode voor. Dan kan ik daar eens induiken :)!
thx
 
Het is een beetje lastig om een voorbeeld te maken, omdat ik geen tabellen van je heb. Maar het beginsel is niet zo heel lastig. Om te beginnen: Je hebt dus een serie records in je Excel tabel staan met prijzen. Die prijzen kennen 2 varianten: ze zijn gelijk aan de prijs van de reeds ingevoerde artikelen, of ze zijn anders. Laten we eens kijken naar het resultaat zoals je dat zou willen hebben in je database:
Code:
Startdate	Enddate	Product	Prijs
1-1-2012	31-5-2012	A	 € 10,00 
1-6-2012	31-1-2013	A	 € 8,00 
1-2-2013	31-7-2013	A	 € 10,00 
1-8-2013	28-2-2014	A	 € 12,00 
1-3-2014	31-12-2014	A	 € 10,00 
1-1-2015	30-4-2015	A	 € 7,00
Ik heb bewust het laatste record uit je verhaal weggelaten, want dat versteert de boel een beetje.
Nu krijg je een nieuw bestand binnen, met de volgende gegevens:
Code:
1-5-2015	31-5-2015	A	 € 7,00
Dit record voldoet aan de eerste variant: de prijs wijzigt niet. Maar de einddatum nu wel. Het prijsrecord moet dus worden aangepast met de nieuwe einddatum. Dat is dus een simpele bijwerkquery met een aantal criteria. Om te beginnen: artikelID en Prijs moeten gelijk zijn aan de gegevens uit de importtabel. Verder moet de startdatum van je importtabel groter zijn of gelijk aan het laatste record uit je hoofdtabel, maar ik denk niet eens dat dat nodig is: zodra je de artikelID's aan elkaar hebt geknoopt, en het criterium op prijs hebt gezet, dan zie je alleen maar de artikelen met identiek productnummer en identieke prijs. De bijwerkquery vervangt dan de huidige einddatum met die uit het importbestand.

Nu deze variant:
Code:
1-5-2015	31-5-2015	A	 € 7,50
Hier is duidelijk sprake van een nieuwe prijs. Omdat je in je importtabel alle gegevens hebt staan en in je datatabel ook (met start- en einddatum) kun je volstaan met een toevoegquery. Het nieuwe record (of records) moeten immers aan de tabel worden toegevoegd. In weze werk je weer met een vergelijkbaar filter, alleen nu dus op identiek produktnummer en ongelijke prijs.

Kortom: met 2 standaardqueries kun je alles doen wat je wilt. Wat je dus niet moet doen, is jouw systeem gebruiken en allerlei dubbele records toevoegen die toch niks dan ellende toevoegen :).
 
Hi Octafish,

Bedankt voor je reactie.
Het eerste gedeelte (bijwerkqry) ben ik uitgekomen. Alleen die toevoeg qry wil niet lukken.
Heb nu deze code:

INSERT INTO [prijs tbl] ( Startdate, [Enddate Product], Product, Prijs )
SELECT DISTINCT [nieuwe gegevens].Startdate, [nieuwe gegevens].[Enddate Product], [nieuwe gegevens].Product, [nieuwe gegevens].Prijs
FROM [nieuwe gegevens], [prijs tbl]
WHERE ((([nieuwe gegevens].Prijs)<>[prijs tbl].[prijs]));

Het criteria gedeelte wilt niet lukken..., hij pakt nu nog gewoon steeds dezelfde prijzen mee.

Wat doe ik fout..?
Gr.
 
Je criterium is ook nog niet volledig; je Select moet kijken naar het laatste record, dus de Startdate van [Nieuwe gegevens] moet groter zijn dan de laatste Enddate van [Prijs tbl].
 
Allright,
Heb nu 3 queries die ik appart van elkaar moet uitvoeren.
Query1 (prijs enddate update): UPDATE [nieuwe gegevens] LEFT JOIN [Prijs tabel] ON [nieuwe gegevens].[Product] = [Prijs tabel].Product SET [Prijs tabel].Prijs = [nieuwe gegevens].[Prijs], [Prijs tabel].Enddate = [nieuwe gegevens].[Enddate]
WHERE ((([Prijs tabel].Prijs)=[Prijs tabel].[Prijs]) AND (([Prijs tabel].Enddate)=DateAdd("d",-1,[nieuwe gegevens].[startdate])) AND (([Prijs tabel].Product)=[nieuwe gegevens].[Product]));

Query2 (nieuwe prijs update): INSERT INTO [Prijs tabel] ( Startdate, Enddate, Product, Prijs )
SELECT DISTINCT [nieuwe gegevens].Startdate, [nieuwe gegevens].Enddate, [nieuwe gegevens].Product, [nieuwe gegevens].Prijs
FROM [nieuwe gegevens] LEFT JOIN [Prijs tabel] ON [nieuwe gegevens].[Product] = [Prijs tabel].[Product]
GROUP BY [nieuwe gegevens].Startdate, [nieuwe gegevens].Enddate, [nieuwe gegevens].Product, [nieuwe gegevens].Prijs
HAVING (((Max([Prijs tabel].Enddate))<[nieuwe gegevens].[startdate]));

Query3 (nieuw product update): INSERT INTO [Prijs tabel] ( Startdate, Enddate, Product, Prijs )
SELECT DISTINCT [nieuwe gegevens].Startdate, [nieuwe gegevens].Enddate, [nieuwe gegevens].Product, [nieuwe gegevens].Prijs
FROM [nieuwe gegevens] LEFT JOIN [Prijs tabel] ON [nieuwe gegevens].[Product] = [Prijs tabel].[Product]
GROUP BY [nieuwe gegevens].Startdate, [nieuwe gegevens].Enddate, [nieuwe gegevens].Product, [nieuwe gegevens].Prijs, [Prijs tabel].Product
HAVING ((([Prijs tabel].Product) Is Null));

Gaat dit zo goed denk je ? :P

Gr
 
Probeer ze eens uit :D
(wel in een testomgeving uiteraard)
 
Het bijwerken gaat volgens mij prima, alleen het toevoegen werkt niet omdat ik nu dat bestand van 2 jaar data gebruik ziet hij natuurlijk heel veel nieuwe prijzen.
ook voor 1 product meerdere malen dezelfde prijzen.
Kortom nu moet ik eerst alle maanden 1 voor 1 invoeren en bijwerken met die queries volgens mij.
 
Oke het is gelukt!, ik zal vanavond/morgen even een lege database bestand uploaden zodat andere het ook kunnen gebruiken!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan