Bijwerkquery met datum

Status
Niet open voor verdere reacties.

test1000

Gebruiker
Lid geworden
7 jul 2017
Berichten
258
Beste,

Ik heb een tabel [pers_afdeling] met de naam, start-/einddatum en afdeling.
Dan heb je een tabel [Personeel] met de naam, datum en afdeling waar deze persoon heeft gewerkt.
In dit voorbeeld.
Personeel 15 - Jan Janssen heeft tussen 01/01/2021 en 31/03/2021 gewerkt in de afdeling 'Boekhouding'.
Tussen 01/04/2021 en 31/08/2021 heeft hij gewerkt in de afdeling 'Verkoop'.
En vanaf 01/09/2021 werkt hij in de afdeling 'Directie'.

Nu wil ik een bijwerkquery maken zodat de tabel [pers_afdeling] correct wordt bijgewerkt.
Want nu staat er na altijd 'Boekhouding'. En voor de juiste datum moet hier de juiste afdeling komen.

Dit is een extract van een groter geheel.
Waarom de tabel [Personeel] zo is opgebouwd is een extract met test data.
Het gaat om het principe.

Kan een bijwerkquery worden opgebouwd zodat per personeel/datum de juiste afdeling wordt ingevuld.
Liefst niet via code omdat een macro 's nachts wordt gedraaid via taakplanner waardoor tabel automatisch worden bijgewerkt.
Als op één of andere manier de code ook via taakplanner kan werken dan is het voor mij ook.
Maar nu, via query, kan ik deze toevoegen in de macro.

Ik heb een tabel [personeel_moet_worden] wat het resultaat moet worden.

De bijwerkquery 'q_bijwerken' die ik gemaakt heb doet het, helaas, niet.

Wie kan mij helpen ?

Alvast bedankt.
 

Bijlagen

  • Personeel.zip
    333,7 KB · Weergaven: 16
Laatst bewerkt:
Dus je wilt dit zien:
PHP:
SELECT PERS_AFDELING.Nummer, PERS_AFDELING.NAAM, PERS_AFDELING.AFDELING, PERSONEEL.DATUM
FROM PERS_AFDELING, PERSONEEL
WHERE (((PERSONEEL.DATUM)>=[PERS_AFDELING].[Startdatum] And (PERSONEEL.DATUM)<=IIf([PERS_AFDELING]![EindDatum] Is Null,Date(),[PERS_AFDELING].[EindDatum])));
?
 
Zie ik het goed dat je alleen een record moet bijwerken als de persoon van afdeling verandert? Dan kan je starten met een groepsquery te maken maken met de min en max data uit het aanpasbestand:

Code:
SELECT PERSONEEL_MOET_WORDEN.NUMMER, PERSONEEL_MOET_WORDEN.NAAM, PERSONEEL_MOET_WORDEN.AFDELING, Min(PERSONEEL_MOET_WORDEN.DATUM) AS StartDate, Max(PERSONEEL_MOET_WORDEN.DATUM) AS EndDate
FROM PERSONEEL_MOET_WORDEN
GROUP BY PERSONEEL_MOET_WORDEN.NUMMER, PERSONEEL_MOET_WORDEN.NAAM, PERSONEEL_MOET_WORDEN.AFDELING;

Dan moet je zoeken naar een afdeling die nog niet bestaat voor die persoon en waarvan de startdatum hoger is dan de hoogste einddatum van en die aan de lijst toevoegen

Code:
INSERT INTO PERS_AFDELING ( Nummer, NAAM, Afdeling, Startdatum )
SELECT PERS_AFDELING.Nummer, PERS_AFDELING.NAAM, PERS_AFDELING.Afdeling, qryStart_EndDate.StartDate
FROM PERS_AFDELING RIGHT JOIN qryStart_EndDate ON (PERS_AFDELING.Afdeling = qryStart_EndDate.AFDELING) AND (PERS_AFDELING.Nummer = qryStart_EndDate.NUMMER)
WHERE (((qryStart_EndDate.StartDate)>=Nz([Einddatum],Date())) AND ((qryStart_EndDate.AFDELING) Is Null));

daarna moet je een update query draaien om de einddatum van de vorige opdracht op de begindatum - 1 van de nieuwe opdracht te zetten

Het is een idee, maar misschien kan iemand anders het wel in één query doen.
 
@noella:
Volgens mij heb je de vraag niet goed begrepen en de tabellen niet goed bekeken :). TS geeft in de tabel [PERSONEEL_MOET_WORDEN] aan wat het gewenste resultaat is. Blijkbaar wordt handmatig in de tabel [PERS_AFDELING] de functiehistorie ingevuld, en moet (op basis van een nog niet geheel bekend dataschema) de tabel [PERSOON] de (ik vermoed werk)dagen worden ingevuld/aangevuld met de juiste functie per dag. Dat is precies omgekeerd aan wat jij hebt bedacht. Een oplossing die denk ik inderdaad wel met één query kan overigens :). Al zou ik het met een functie doen.
Al moet ik zeggen dat op basis van de tekst van TS
Nu wil ik een bijwerkquery maken zodat de tabel [pers_afdeling] correct wordt bijgewerkt.
ik ook op het (in mijn ogen dus verkeerde) spoor werd gezet. Puur vanwege het feit dat deze gegevens:
Want nu staat er na altijd 'Boekhouding'. En voor de juiste datum moet hier de juiste afdeling komen.
niet in de tabel [PERS_AFDELING] staan, maar in de tabel [PERSOON]. Met nu dus inderdaad alleen de afdeling BOEKHOUDING als functie.
 
Dus, zoals ik 'm interpreteer, krijg je dit als bijwerkquery:
Code:
UPDATE PERS_AFDELING, PERSONEEL SET PERSONEEL.AFDELING = [PERS_AFDELING].[Afdeling]
WHERE (PERSONEEL.DATUM>=[PERS_AFDELING].[Startdatum] And PERSONEEL.DATUM<=IIf([PERS_AFDELING]![EindDatum] Is Null,Date(),[PERS_AFDELING].[EindDatum]))
 
Hoi,

Sorry voor de wat onduidelijke vraag.
Maar adhv de info heb ik het probleem kunnen oplossen.
Hartelijk dank en weer een gelukkig persoon :)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan