Toon posts:

[SQL]Complexe query?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een tabel met volgende velden:
ID | NAAM | WAARDE
01 p01 100
02 p02 200
03 p03 300

Hierin staan een reeks parameters met hun waarde
Telkens wanneer er een waarde wordt geupdate zorgt een trigger ervoor dat de inhoud van dat record naar een andere tabel wordt gekopieerd.
Die tabel heeft volgende velden:

ID | NAAM | WAARDE | GEWIJZIGDOP
01 p01 100 01/02/2003
01 p01 280 05/02/2003
03 p03 300 03/02/2003
01 p01 110 03/02/2003
02 p02 200 06/02/2003
02 p02 350 04/02/2003

Deze tabel heeft geen PK, het ID veld bevat de waarde van de ID uit de eerste tabel en kan dus meerdere keren voorkomen. GEWIJZIGDOP bevat het tijdstip van wijziging.

Hoe is het mogelijk om voor een bepaald tijdstip de recentste waardes van alle parameters terug te krijgen uit deze tabel? Het kan zijn dat voor een bepaald tijdstip geen entry is in de tabel, dan moet de waarde het laatst gewijzigd, voor dat tijdstip, worden teruggegeven.
Elke parameter mag maar 1 keer voorkomen in het resultaat. Met DISTINCT te gebruiken lukt het me niet

Wanneer ik de parameters met hun waardes wil voor tijdstip "04/02/2003", zou ik dan volgend resultaat moeten krijgen:
01 p01 110 03/02/2003
02 p02 350 04/02/2003
03 p03 300 03/02/2003

Het is trouwens een bestaande Oracle8 database, waaraan niets kan gewijzigd worden.

[ Voor 27% gewijzigd door Verwijderd op 12-02-2003 13:17 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:16

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 vindt het een vaag datamodel.

Waarom doe je niet:
ID | NAAM

ID | WAARDE | GEWIJZIGDOP

En [gokmodus] Group BY en Max gebruiken [/gokmodus]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Harmen1975
  • Registratie: Juli 2002
  • Laatst online: 17-11-2025
Dit is toch op te lossen met een subquery ?? ...of begrijp ik het nu verkeerd...

Ik moet zeggen dat je vraagstelling bijzonder onduidelijk is....het is mij niet 100% duidelijk welke data je nu uit welke tabel wil halen. Stel je vraag eens duidelijk, waarschijnlijk krijg je dan ook meer reacties!

Op de tweede tabel die je noemt zit geen PK...waarschijnlijk ook geen index ?? Een subquery die een full table scan uitvoert zal dan een bijzonder traag werken.

Geef eens wat extra informatie en stuur de persoon die je datamodel heeft gemaakt eens op cursus :+

If you don't succeed at first, redefine succes.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Elk tabel hoort een PK te hebben. Bij jou zal dat 2 kolommen samen zijn (id, gewijzigdop)

Een mogelijkheid is om de trigger aan te passen zodat de "geschiedenis" tabel meteen wordt geupdate (immers als je vandaag de prijs veranderd is het ook een gedeelte van de geschiedenis.)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Harmen1975
  • Registratie: Juli 2002
  • Laatst online: 17-11-2025
Ik heb je verhaal nog eens rustig gelezen...

Je hebt de volgende tabellen: PARAMETERS en PARAMETERS_HISTORIE
Elke parameter in de tabel parameters heeft zijn eigen unieke naam en id.

SELECT par1.id, par1.naam, his1.waarde, his1, his1.gewijzigd_op
FROM parameters par1
, parameters_historie his1
WHERE par1.id = his1.id
AND his1.gewijzigd_op = (SELECT MAX(his2.gewijzigd_op)
FROM parameters_historie his2
WHERE his2.gewijzigd_op <= "opgegeven datum"
AND his2.id = par1.id)

UITLEG:

Je joint de tabellen parameters en parameters_historie. Deze query zou dus de hele update geschiedenis van alle parameters laten zien. In die subquery haal je van elke parameter de hoogste gewijzigd_op datum op die kleiner is dan je opgegeven datum. In de hoofdquery stel je gewijzigd_op gelijk aan de gewijzigd_op datum uit de subquery.

Mocht ik het verkeerd begrepen hebben uit je (niet al te duidelijke) verhaal laat het dan even weten !

If you don't succeed at first, redefine succes.


  • Harmen1975
  • Registratie: Juli 2002
  • Laatst online: 17-11-2025
dusty schreef op 12 February 2003 @ 13:11:
Elk tabel hoort een PK te hebben. Bij jou zal dat 2 kolommen samen zijn (id, gewijzigdop)

Een mogelijkheid is om de trigger aan te passen zodat de "geschiedenis" tabel meteen wordt geupdate (immers als je vandaag de prijs veranderd is het ook een gedeelte van de geschiedenis.)
Niet echt handig...je geschiedenis gaat anders verloren!

If you don't succeed at first, redefine succes.


Verwijderd

Topicstarter
Bedankt voor de oplossing en uitleg, dit was inderdaad wat ik zocht!
Pagina: 1