Vergelijken van records

Status
Niet open voor verdere reacties.

pvdberg87

Gebruiker
Lid geworden
26 apr 2011
Berichten
10
Hallo iedereen,

ik heb een vraagje: (goh logisch want anders zou ik het niet op het forum plaatsen:o)

Ik heb 2 tabellen met informatie over computers. De standaard info zoals operatings system, RAM etc. In deze tabellen staat ook het maand nummer.
Nu heb ik een query geschreven die de twee tabellen controleerd op wijzigingen. Het oude record wordt opgehaald en het nieuwe record wordt opgehaald.

Wat je dan krijgt als result:

Computer - ram - OS - tabel - maand - jaar
computer1 512 WinXP oud 4 2011
computer1 1024 WinXP nieuw 4 2011
computer2 1024 WinXP oud 4 2011
computer2 1024 Win7 nieuw 4 2011

Deze resultaten worden opgeslagen in een nieuw tabel.
Omdat dit nogal onoverzichtelijk is en je de data alsnog moet vergelijken wil ik een query die een tabel genereerd zoals hieronder:

Computer - wijziging - oude data- nieuwe data maand - jaar
computer1 - RAM - 512 - 1024 - 4 - 2011
computer2 - Operating system - WinXP - Win7 - 4 - 2011

Ik wil dus de computer zien waarvoor de wijziging geldt.
Wat is er gewijzigd? Dit is de naam van de kolom.
De oude data en de nieuwe data. vandaar dat ik zowel het oude als het nieuwe record ophaal.

Kan iemand mij een duwtje in de rug geven hiermee?
Alvast bedankt voor de hulp
 
Volgensmij is het véel makkelijker om die wijzigingstabel op te bouwen op het moment dat je de wijziging maakt in je applicatie dan om ze na afloop te genereren. Sowieso zet het een heleboel druk op je database om zo'n wijzigings-tabel te genereren.

Je kunt beter gewoon direct bij iedere wijziging een rij toevoegen aan de tabel met veranderingen, gezien je op dat moment al precies weet wat er veranderen gaat.
 
Bedankt voor je reactie frats.
Opzich maakt het in dit stadium niet zoveel uit wanneer de data naar de wijzingstabel weggeschreven wordt. Dat is meer voor latere zorg, maar zoals jezelf ook al aangaf: kan de data beter naar de wijzigngstabel weggeschreven worden zodra er een wijziging plaatsvind.

Helaas is daarmee mijn vraag nog niet beantwoord hoe ik de data kan query'en zodat ik een overzichtje krijgt met welke data er gewijzigd is en wat de oude en de nieuwe waarde is.
 
De laatste zin van frats, dat is de spijker op zijn kop.

Je moet helemaal niet twee tabellen hebben.
Een tabel
een record bij aankoop van de computer met een begindatum en een einddatum (fictief, bijv. 9999-99-99)

Bij elke wijziging van de configuratie van deze computer wordt het bestaande record voorzien van een reele einddatum.
Er wordt een nieuw record gemaakt met de gewijzigde configuratie, een nieuwe begindatum en (again) een fictieve einddatum.
Het beeld wordt dan als volgt:

comp1, 512, winXP, 2004-11-30, 9999-99-99 wordt na de eerste mutatie

comp1, 512, winXP, 2004-11-30, 2007-03-18 en vervolgens na enkele mutaties:
comp1, 1024, winXP, 2007-03-18, 2010-06-27
comp1, 1024, win7, 2010-06-27, 2011-01-15
comp1, 2048, win7, 2011-01-15, 9999-99-99

...en die records komen dus ook daadwerkelijk allemaal onder elkaar in de tabel te staan. Niet dat je steeds hetzelfde record gaat aanpassen.

Persoonlijk zou ik er ook nog een veld aan toevoegen met de wijzigingsdatum:
niet de datum waarop de computer veranderd maar de datum waarop het record wordt aangepast.
Kwestie van standaardwerkwijze, die misschien niet altijd nodig is maar in veel gevallen wel verschrikkelijk handig.
 
Bedankt voor je reactie tecsman maar dit ook niet helemaal wat ik zoek.
ik denk dat mijn formulering van de vraag niet helemaal duidelijk is.
een query die een tabel geeft met de wijzigingen heb ik al.
Oftewel wat Frats en tecsman aangeven heb ik al.

Het nadeel alleen is als ik de tabel open dat je dan een gigantische berg aan informatie ophaal want de tabel bestaat uit de voglende gegevens:
[Klant] ,[ContractNaam] ,[ContractStatus] ,[OmgevingNaam] ,[Computer] ,[LogicalProcessor] ,[Processorname] ,[OSName] ,[RAM] ,[HDDDeviceID] ,[HarddiskeSize], [maand], [jaar]

Je krijgt een overzicht zoals tecsman alleen dan 3x zo groot.
Hierdoor ben je meteen je overzicht kwijt want je kan niet in één oogopslag zien welke gegevens er gewijzigd zijn. Je kan niet snel zien of de RAM groter is geworden of dat er een extra processor erbij geplaatst is.

Ik wil dus een query waarmee je een result krijgt wat eruit als:
computer - wijziging - oude waarde - nieuwe waarde
computer1 - RAM - 512 - 1024
computer1 - logicalProcossor - 1 - 2
computer2 - Operating system - WinXP - Win7

Ik hoop dat mijn vraag nu wat duidelijker is.
Bedankt voor de hulp!
 
Wat wij bedoelen is dat je niet een query zou moeten maken die dat resultaat op levert, maar een tabel met die velden er in die automatisch door je applicatie gevuld wordt met wijzigingen.

Ik zie zo geen manier om dit in SQL te doen (iig niet zonder hele moeilijk en onnodige bewerkingen)

Als je het eenmalig wil doen kun je een script maken dat het berekend maar ik zou echt gaan voor een vaste tabel met "computer - wijziging - oude waarde - nieuwe waarde" als velden ipv hem on the fly proberen te maken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan