28. juli 2004 - 16:57Der er
15 kommentarer og 1 løsning
En periode der ligger inde i en anden periode
Jeg har "gjort" en database der styrer medarbejdernes forsikring, når disse er på tjenesterejse i udlandet. Bl.a. er der 2 felter AFREJSE og HJEMKOMST, der som navnene siger fortæller tjenesterejsens periode. Perioden kan strække sig fra 1 dag til flere måneder. Et eksempel:
AFREJSE: 2004-06-01 HJEMKOMST: 2004-06-30
AFREJSE: 2004-05-01 HJEMKOMST: 2004-10-31
På baggrund af disse 2 datoer er der så nogle beregnende udtryk, der beregner forsikringspræmien for den samlede tjenesterejse.
Problemet er nu, at jeg skal bruge en oversigt, der viser forbruget indenfor en valgfri måned. Hvis jeg f.eks med et kriterie indsætter >=2004-06-01 for AFREJSE og <=2004-06-30, kommer der kun een post ud, idet AFREJSE for tjenesterejse 2004-05-01 jo ligger før kriteriet.Jeg skal også have forbruget for den del af af tjenesterensen der starter 2005-05-01, der ligger indenfor kriteriet.
Jeg mener der er funktioner "in" og "not in", der måler om en periode ligger inde i en anden periode.
Jeg er sikker på, at jeg også har set et eksempel på eksperten, men kan ikke finde det. Og da jeg er lidt presset på tid...
Kan du ikke loope igennem dine poster og lave de 4 mulige cases og en else, eller sætte de tilsvarende kriterier ind i en forespørgsel: If Afrejse < måedens startdato and Hjemkomst > månedens slutdato then ... If Afrejse < månedens startdato and Hjemkomst < månedens slutdato And > Månedens Startdato then .... If Afrejse > Månedens startdato And < månedens slutdato and Hjemkomst > månedens slutdato then .... If Afrejse < Månedens startdato and < månedens slutdato and Hjemkomst < månedens slutdato then ... Else Endif
Tak for forslaget. Efter at have arbejdet med databasen siden imorges, og når jeg ser på de forespørgsler / rapporter jeg har lavet, sammenlignet med de specifikationer jeg har fået, føler jeg mig mere og mere overbevist om, disse til fulde opfylder de oprindelige kravsspecifikationer. Jeg vil TOR se "bestilleren" dybt i øjnene og spørge, om denne forespørgsel er så vigtig.
Jeg har en fornemmelse af, det er nice to know, og ikke need to know.
Jeg vil dog bede dig om lidt tålmodighed, og lade spørgsmålet stå åbent et par dage endnu.
Det er korrekt. Men jeg er simpelthen så firkantet i øjnene, at jeg snart ikke kan se skoven for bare træer, og endnu mindre have at gøre med disse If.. Then.., dem har jeg aldrig været gode venner med :o)
Jeg har en løsning: Den kræver at du opretter en tabel med ALLE datoer i: Opret en tabel: AlleDatoer med eet felt 'dato'
Sub IndsetDatoer() Dim rs As dao.Recordset Dim dato As Date Set rs = CurrentDb.OpenRecordset("alledatoer") dato = #1/1/2000# For i = 0 To 10000 rs.AddNew rs(0) = dato + i rs.Update Next i End Sub
Herefter kan du lave en foresp: Jeg har kaldt din eksiterende tabel MugsTabel: (navn, afrejse, hjemkomst)
SELECT MugsTabel.navn, Count(AlleDatoer.dato) AS AntalOfdato, Year([dato]) & "-" & Month([dato]) AS Udtryk1 FROM AlleDatoer, MugsTabel WHERE (((MugsTabel.affrejse)<[dato]) AND ((MugsTabel.Hjemkomst)>[dato])) GROUP BY MugsTabel.navn, Year([dato]) & "-" & Month([dato]);
Jeg mener ikke det er en optimal løsning at have en ekstra tabel med 10.000 poster - men jeg er sikker på det er det nemmeste. Så kan man opveje fordele ulemper, og jeg mener fordelene: hastighed i beregninger og forespørgsler, overskuelighed osv. vejer tungere end nettrafik og harddiskplads på knap 1 MB.
Egentlig ikke. Jeg har prøvet at implementere din SQL, men kan ikke få det til at give det rigtige resultat. Db ligger på min arbejdsplads, hvor jeg i de sidste dage ikke har haft ro til at forsøge mig. Vi fik ny Chef i FRE, så det giver en masse administrativ uro at sætte ham ind i tingene. Men jeg prøver igen idag, og I vil få en tilbagemelding iaften.
Så lykkedes det. Man skal bare blive tilstrækkelig gal i skralden. Jeg brugte Niels' løsning, og når bare feltnavnene bliver stavet korrekt fungerer det perfekt. Tak for hjælpen til Jer begge.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.