Avatar billede gimmer Nybegynder
01. juni 2003 - 14:29 Der er 13 kommentarer og
2 løsninger

Difference i datoer!

HEJ. Jeg skal regne datoer ud fra en tekst fil...

Selve min subquerry ser således ud

19990220
19990226
19990229

Så skal acces skrive

6
3

ud hvordan kan dette gøres?
nogle ideer?
ville det være muligt med en datediff hvis jeg lavede det om til tal... og hvordan skulle det så gøres?
01. juni 2003 - 14:58 #1
til at starte med, så kan du trække datoen ud vha denne funktion (der er flere andre muligheder):
cvdate(Left([Dato];4) & "-" & mid([Dato];3,2) & "-" & Right([Dato];2))

([Dato] er navnet på dit tekst-felt som indeholder datoen)

Så kommer problemet med at læse den forrige post....
Avatar billede terry Ekspert
01. juni 2003 - 16:08 #2
there are a number of steps needed to solve this problem, the first one is reading the text field. Then you have another step to convert the text into a date.
The easiest way to get the previous record is keep it in a variable and then move on to the next "record". You obvioulsy need to keep in mind that the first record has no previus record and the last record has no next.
Avatar billede terry Ekspert
01. juni 2003 - 16:12 #3
You write "Selve min subquerry ser således ud" !!!!
Can you give some more info. Arent we talking text files or what?
01. juni 2003 - 16:59 #4
Der havde vist lige sneget sig en lille fejl ind i min funktion:
cvdate(Left([Dato];4) & "-" & mid([Dato];5;2) & "-" & Right([Dato];2))

Gimmer-> Der er flere måder at læse forrige værdier fra en given tabel. Men de fleste er meget langsomme at udføre. Så inden jeg kommer med nogle konkrete forslag, så skal jeg vide om hastigheden har nogen betydning? Er det en stor tabel? Kan svartider på 10-20 sekunder accepteres?
01. juni 2003 - 20:37 #5
Her har du en SQLsætning, som skule løse problemet:

SELECT DateSerial(Left([Dato],4),Mid([Dato],5,2),Right([Dato],2)) AS ReelDato, DateDiff("d",(SELECT Max(DateSerial(Left([Dato],4),Mid([Dato],5,2),Right([Dato],2))) AS ForrigeDato
FROM tblDatoer AS TD
WHERE (((TD.Dato)<tblDatoer.Dato));
),DateSerial(Left([Dato],4),Mid([Dato],5,2),Right([Dato],2))) AS Afstand
FROM tblDatoer;

Udskrift selv tblDatoer med navnet på din tabel og Dato med navnet på dato-feltet.

Forespørgslen giver 2 kolonner: ReelDato (Dato i 'rigtigt' datoformat) og Afstand (i antal dage). Reeldato kan bare slettes, hvis du kun skal bruge den anden kolonne.

/Thomas
Avatar billede gimmer Nybegynder
02. juni 2003 - 07:20 #6
Mange Tak.... Det var lige de svar jeg skulle bruge!
02. juni 2003 - 08:53 #7
Selv tak.

Terry-> Det var da lettjente point, hva'? :o)
Går det godt med det nye arbejde?
Avatar billede gimmer Nybegynder
02. juni 2003 - 09:44 #8
men så lige et sidste spørgsmål.... hvad så hvis man ikke ved hvor mange datoer der skal sammenlignes... og så lige en sidste ting... hvorfor siger den konsekvent 11 dage og ikke kun 6 og 3?
vh Gimmer
PS. Nå ja.... hvad betyder tallene i eks. Mid([Dato],5,2)
02. juni 2003 - 09:49 #9
Den burde heller ikke kun sige 11 dage!?? Kan du indsætte SQL'en her, så jeg kan se om der skulle have sneget sig en fejl ind?

Mid([Dato],5,2) betyder at den skal starte ved den 5. karakter og gå 2 frem.
Mid("ABCDEFG", 2,3) = "BCD"
Avatar billede gimmer Nybegynder
02. juni 2003 - 11:32 #10
Jammen her kommer så sql-sætningen....
SELECT DISTINCT ( DateSerial(Left(Avis_Dato,4),Mid(Avis_Dato,5,2),Right(Avis_Dato,2))) AS ReelDato, DateDiff(("d",SELECT Max(DateSerial(Left(Avis_Dato,4),Mid(Avis_Dato,5,2),Right(Avis_Dato,2))) AS ForrigeDato
FROM Indrykning AS TD
WHERE (((TD.Avis_Dato)<Indrykning.Avis_Dato))),
DateSerial(Left(Avis_Dato,4),Mid(Avis_Dato,5,2),Right(Avis_Dato,2))) AS Afstand
FROM Indrykning;

men stadig hvad vis der så er 11 datoer?
på forhånd tak!!!!!
02. juni 2003 - 11:53 #11
Der er også et eller andet galt med den, men jeg kan ikke lige gennemskue det. Du har i hvert fald nogle underlige parenteser hist og her. Bla. 2 parenteser efter ordet Datediff!
Men den bør se således ud:

SELECT DateSerial(Left([Avis_Dato],4),Mid([Avis_Dato],5,2),Right([Avis_Dato],2)) AS ReelDato, DateDiff("d",(SELECT Max(DateSerial(Left([Avis_Dato],4),Mid([Avis_Dato],5,2),Right([Avis_Dato],2))) AS ForrigeDato
FROM Indrykning AS TD
WHERE (((TD.Avis_Dato)<tblDatoer.Avis_Dato));
),DateSerial(Left([Avis_Dato],4),Mid([Avis_Dato],5,2),Right([Avis_Dato],2))) AS Afstand
FROM Indrykning;
Avatar billede gimmer Nybegynder
02. juni 2003 - 12:14 #12
jammen nu regner den pludseligt rigtigt!!!
har du også en ide til hvordan den gøres dynamisk? altså så det ikke kun er 3 datoer, men nogen gange 2 og andre gange max 20?

VH Gimmer
Ps: Du styrer sku det sql temmeligt vildt!
02. juni 2003 - 12:18 #13
øh...der er da ingen begrænsning på antallet af poster (datoer). Hvis der er 100 poster i tabellen, så kommer der også 100 poster i dit udtræk! Eller forstår jeg dit spørgsmål forkert?
Avatar billede gimmer Nybegynder
02. juni 2003 - 12:21 #14
sorry det er mig der ikke havde testet min db ordenligt...... MANGE TAK!
Avatar billede terry Ekspert
02. juni 2003 - 22:02 #15
gimmer>tak for de lettjente point :o)
Hi Thomas, yes they were easily earned, I feel really bad taking them, but what the heck :o)

Yes I'm really happy with the new job thanks, and once again its nice to go to work. Hows your goings, still lots to do?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester