Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Anders (software)

voor de sql (access 2000) deskundigen

Led
8 antwoorden
  • Ik heb twee tabellen gekoppeld op basis van emp_id , in geen van beide tabellen is dit een unieke waarde, de eerste tabel is een tabel met veel datums de tweede tabel is een tabel met dienstverbanden. Nu moet het bij de datum uit het eerste tabel behorend dienstverband worden gezocht uit de tweede tabel waarbij de hoogste ingangsdatum van het dienstverband uit de tweede tabel dus lager of gelijk moet zijn aan de datum in eerste tabel.

    Met de hulp van jullie in een soortgelijk geval kwam ik dan uit op iets wat lijkt op onderstaand criterium in een query :
    (select max( [0052DIF\Dienstverban]![Ingangsdatum*DIF] ) from [0052DIF\Dienstverban] where ([0052DIF\Dienstverban]![Ingangsdatum*DIF] <= [tbl_ontbree]![Datum*IRE] and [0052DIF\Dienstverban]![EMP_ID*DIF] = [tbl_ontbree]![EMP_ID*FUG] ))

    in die andere varianten werkte het wel maar nu draait de query heel lang en komt nooit met een resultaat of ik krijg alleen die waarden waarbij de datums exact gelijk zijn aan elkaar.

    Wie kan hier een fout ontdekken, en een andere vraag is onder welk veld moet ik dit criterium zetten, en last but not least : moet ik de tabellen nog wel via een join met elkaar verbinden.?
  • Ik vind je query erg lastig om te lezen. Misschien is dit rechtstreeks gekopieerd uit Acces, maar het is altijd handig om het even duidelijk uit te schrijven.

    Verder:

    Wat voor een tabellen heb je hier? Wat staat erin? En kun je in "jip en janneke" taal uitleggen wat je wilt? Dat maakt het voor jezelf ook duidelijker.

    Als het zo is dat beide tabellen gejoined worden via de emp_id, dan is het wel handig om die altijd te gebruiken in je join. Tenzij je datums van de ene employee wilt vergelijken met de andere.

    Het feit dat je niet de emp_id gebruikt om te joinen is waarschijnlijk de belangrijkste reden voor het traag zijn van je query. Nu wordt de query zeker vertaald in een full table scan wat altijd lang duurt.
  • Nog even ter verduidelijking :

    Ik heb twee tabellen die aan elkaar gekoppeld zijn via de emp_id

    de in het eerste stukje weergegeven sql-tekst is sql tekst die als voorwaarde onder het veld ingangsdatum staat opgenomen. Misschien kun je zeggen dat het een stukje sql is binnen een query
  • Ik heb even je query herschreven, want door het onnodige spul eromheen had ik inderdaad een leesfout gemaakt. Je hebt zoiets gemaakt:

    [code:1:960adaf5b6]
    select max( Dienstverban.Ingangsdatum )
    from Dienstverban
    where ( Dienstverban.Ingangsdatum <= tbl_ontbree.Datum
    and Dienstverban.EMP_ID = tbl_ontbree.EMP_ID )
    [/code:1:960adaf5b6]

    Als ik je verhaal goed begrijp wil je een (ingevoerde) datum controleren met behulp van de twee tabellen. Volgens mij zou je het dan zo moeten doen:

    [code:1:960adaf5b6]
    Select ont.datum
    from tbl_ontbree ont
    where tbl_ontbree.datum >= ( select max(die.ingangsdatum)
    from dienstverban die
    where die.emp_id = ont.emp_id )
    [/code:1:960adaf5b6]

    Je kan ook de tabellen omdraaien, ik zie nog niet welke datum je precies wilt controleren.
  • Ik snap er werkelijk niets van, ik krijg nu 13 records terug, terwijl het er ruim 9000 moeten zijn. Hij moet gewoon uit de tabel dienstverbanden de datum zoeken die gelijk is of lager dan de datum uit de table ontbree.

    Led : zou ik je de tabellen en querie mogen mailen zodat je er even in het echies naar kunt kijken? zou er zeer mee geholpen zijn.
  • Ik heb je een mailtje gestuurd, dar kan je op reply-en als je wilt.

    Mocht je mijn bovenstaande query hebben geprobeerd: dan vind ik 13 records niet zo gek. Let wel: dan heb je 13 records die bij dezelfde emp_id een datum hebben die ligt voor de datum uit de andere tabel. 9000 records zou in dat geval wel erg veel zijn.
  • Ik zit me ineens iets te bedenken….

    Jij zegt in je eerste post dat emp_id in beide[b/] tabellen niet de unieke id is. Dat betekent dat mijn adviesquery ook niet gaat werken. :oops: Je krijgt dan namelijk een cartesisch product: bij elke emp_id van tbl_ontbree wordt een datum gezocht, maar ik neem aan dat je slechts één datum wilt van de emp_id. Dan wordt het probleem wat lastiger.

    Kun je misschien aangeven wat precies de bedoeling is van tabel tbl_ontbree en wat de kolommen zijn?
  • tabel ontbree bevat onder andere de kolommen emp_id (een soort personeelsnummer), een datum waarop gewerkt is, een begintijd, eind tijd enz. Van een medewerker zijn dus een groot aantal records met daarin gegevens op welke datum en op welke tijd een activiteit is begonnen. De tabel dienstverbanden bevat o.a. de kolommen emp_id, de datum waarop het dienstverband voor het eerst van toepassing is, en het percentage dienstverband. Indien een werknemer dus van dienstverband veranderd, wordt een nieuw record aangemaakt met de hiervoor vermelde gegevens.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.