Welkom op het forum van startpagina!

Dit forum staat op alleen-lezen. Je kan hier informatie zoeken en oude berichten terugvinden, maar geen nieuwe berichten plaatsen.

Naar overzicht van alle forums

Meest recent record

  • Karin

    Hallo allemaal,

    Ik heb een tabel met o.a. de volgende velden:

    Scheepsnaam, type keuring, datum keuring.

    Elk schip heeft meerdere records want meerdere (verschillende typen)keuringen op verschillende data.

    Nu wil ik een rapport met daarop bij elke scheepsnaam, de datum van de meest recente keuring plus het type keuring dat op die datum is uitgevoerd. Wie kan mij zet mij op het juiste spoor? Ik ben het spoor bijster, na dagen geknutsel met IIFjes in een rapport..

    Dank!

    Karin

  • muzzi

    Je kan volgens mij als je een record maakt op een gegeven moment aangeven waarop die moet sorteren, dan zet je het veld datum op oplopend of aflopend.

    maar volgens mij wil je alles eerst gesorteerd per schip, daarna op datum met bijbehorende type?

    doe het volgende

    new raport wizard > voeg velden toe uit tabel >volgende>

    maak een groepeer niveau aan op schipnaam en klik volgende in het volgende scherm geef je nu aan dat datum oplopend of aflopend moet zijn.. vervolgens volgende volgende finish.

  • RV

    Maak een nieuwe query.

    Kies voor SQL weergave, zet daarin deze code:

    SELECT Scheepsnaam, Keuringstype, Keuringsdatum

    FROM JeTabel

    WHERE Keuringsdatum =

    (

    SELECT A.MAX(Keuringsdatum)

    FROM JeTabel AS A

    WHERE A.Scheepsnaam = Scheepsnaam

    )

    ORDER BY Scheepsnaam

    Query ff aanpassen naar je tabelnaam en kolomnamen.

    Sla de query op.

    Maak vervolgens een nieuw rapport, gebruik als rijbron voor je rapport de query.

    RV

  • Karin

    Dank, RV. Kennelijk doe ik iets toch nog iets niet goed gedaan want ik krijg de melding

    “Undefined function ‘A.MAX’ in expression”

    Ik heb het volgende dus in de code gezet (de tabelnaam is surveys)

    SELECT scheepsnaam, keuringstype, keuringsdatum

    FROM surveys

    WHERE keuringsdatum =

    (

    SELECT A.MAX(keuringsdatum)

    FROM surveys AS A

    WHERE A.scheepsnaam = scheepsnaam

    )

    ORDER BY scheepsnaam

    Zie jij waar het fout gaat?

  • RV

    Typefoutje van mijn kant, code moet zijn:

    SELECT scheepsnaam, keuringstype, keuringsdatum

    FROM surveys

    WHERE keuringsdatum =

    (

    SELECT MAX(A.keuringsdatum)

    FROM surveys AS A

    WHERE A.scheepsnaam = scheepsnaam

    )

    ORDER BY scheepsnaam

    RV

  • Karin

    OK, er gebeurt nu wat. Ik krijg het meest recente record van de hele tabel, maar niet per schip.

    Ik heb een proeftabelletje als volgt gevuld

    schip keuringstype keuringsdatum

    A Initial 01-03-2001

    A Annual 0.1 01-04-2002

    A Annual 0.2 11-04-2003

    A Renewal 1 01-03-2004

    B Renewal 1 01-04-2004

    B Annual 1.1 01-04-2004

    C Renewal 2 12-10-2004

    en alleen schip C komt er keurig uit met naam, type en datum.

    Wat ik zou willen, is dat ELK schip er uitkomt met naam, type en meest recente datum:

    Schip A Annual 0.2 11-04-2004

    Schip B Annual 1.2 01-04-2004

    Schip C Renewal 2 12-10-2004

    Misschien heb je nog een goede tip? Tnx!

  • Karin

    Gewenste uitkomst lijstje is natuurlijk zo..

    A Renewal 1 01-03-2004

    B Annual 1.1 01-04-2004

    C Renewal 2 12-10-2004

  • JaapT

    Karin,

    Dit kan niet met één query vanwege de typekeuring.

    Maak de volgende 2 querys:

    SELECT tabel6.scheepsnaam, Max(tabel6.keuringsdatum) AS MaxVankeuringsdatum

    FROM tabel6

    GROUP BY tabel6.scheepsnaam

    ORDER BY tabel6.scheepsnaam;

    (tabel6 veranderen in jouw tabelnaam) ik heb deze opgeslagen als Query7

    SELECT Query7.scheepsnaam, Tabel6.keuringstype, Tabel6.keuringsdatum

    FROM Query7 INNER JOIN Tabel6 ON (Query7.scheepsnaam = Tabel6.scheepsnaam) AND (Query7.MaxVankeuringsdatum = Tabel6.keuringsdatum);

    (tabel6 en Query7 veranderen in jouw namen)

    Succes,

    Jaap

  • Karin

    Geweldig, het werkt. Ik kan er nu mee verder.

    Dank RV, en JaapT!

    Gezellige dagen toegewenst,

    Karin

  • Karin

    Ik kan mij heel goed voorstellen als nu te veel vraag, maar ik waag het er toch op…

    Nu heb ik van elk schip de meest recente keuring. Prachtig!

    Ik wil nog een stapje verder: ik wil in het rapport ook laten zien wanneer het schip aan de beurt is voor welke volgende keuring.

    De volgorde van de soorten keuringen ligt vast:

    Initial

    Annual 0.1 (‘verjaardag’ = Initial + 1 jaar)

    Annual 0.2 (=Initial + 2 jaar)

    Renewal 1 (=Initial + 3 jaar)

    Annual 1.1 (=Renewal 1 + 1 jaar)

    Annual 1.2 (=Renewal 1 + 2 jaar)

    Renewal 2

    Annual 2.1

    Annual 2.2

    Etc.

    Het vervelende is, dat de regels per type keuring verschillen:

    Initials/renewals:

    Interval: 3 jaar, keuring moet in de periode ‘verjaardag’ -/- 6 maanden gedaan zijn.

    Annuals:

    Interval: 12 resp. 24 maanden na een initial of renewal. Keuring moet in periode 3 maanden voor of 3 maanden na verjaardag gebeuren.

    Om de status van een schip te bereken (of hij al dan niet ‘overtijd’ is), dacht ik aan een verjaardagsconstructie;

    Bijvoorbeeld:

    (av_r1 staat voor anniversary renewal 1, drie jaar na initial dus)

    Ik bereken de verjaardag van renewal 1 als volgt: av_r1 = DateAdd(q;12;)

    De keuring moet plaatsvinden tussen = DateAdd(q;10;)

    en voor av_r1.

    Om op het rapport te laten zien wat de status van het schip op dit moment is, heb ik de volgende formule: Status=IIf(>Now() And