Avatar billede ibnielsen Seniormester
31. oktober 2003 - 10:44 Der er 22 kommentarer og
1 løsning

lave perioder ud fra datoer der står i samme felt

Jeg har en tabel i access der f.eks. kan se således ud:

navn        dato          aktivitet
ib          010103          aktiv
ib          020203          passiv
ib          010303          arkiv
ib          010403          aktiv
ib          010803          passiv

Der er mange personer i tabellen, men aktivitet kan kun være aktiv, passiv eller arkiveret, og i virkeligheden står der 1 for aktiv 2 for passiv og 3 for arkiveret.
En bruger kan have mange perioder, og jeg har til opgave at finde perioden fra en bruger bliver aktiv til han/hun bliver passiv. cyklussen er altid aktiv -> passiv, men nogen gange kommer der en arkiveret.
Jeg har forespurgt hos professionelle programmører, men de kunnne ikke hjælpe, så opgaven er nok meget svær
Avatar billede hugopedersen Nybegynder
31. oktober 2003 - 10:55 #1
Det vil jeg nok have tilbøjelighed til at give dem ret i :-)    Du har jo ikke noget der viser hvilken cyklus de enkelte records hører til, så det vil ikke blive nemt nej.  Det jeg mener er at du ikke kan se på din record med passiv hvilken aktiv den hører sammen med og hvis ikke du kan det, så har du lige som mange muligheder for at finde starten.
Avatar billede henrik13 Nybegynder
31. oktober 2003 - 11:02 #2
Jeg har en ide om at søge via en forespørgsel efter første dag ib er aktiv = 1, og første dag ib er passiv - 1 og her søges efter 2 og så smide hele i en rapport. Men i stedet for ib må det være et unikt nr. man må kunne søge på. så kan det laves som imputbox, Kunne man få databasen tilsendt, det ville være lettere, end at skulle opbygge en test db. Min E-mail adresse er:
oz1bua@wanadoo.dk
Mvh Henrik13
Avatar billede terry Ekspert
31. oktober 2003 - 11:15 #3
You forget to mention WHEN "arkiveret" happens! Is this after passiv or cn ait happen ant time?
Also, I assume that there can be one aktiv which doesnt have a following passiv, is that correct?

(professionelle programmører)! Well there are those who think they are proff. and those that are :o)

If your data structure is as I think it is then I think I can find a solution!
Avatar billede hugopedersen Nybegynder
31. oktober 2003 - 11:24 #4
Hvis bare du havde brugt et andet datoformat, så kunne en forespørgsel der sorterer på navn, dato og så på status give dig en liste der viser forløbet.

Datoen skulle så ååååmmdd (altid en god ide hvis der skal sorteres på det)
Avatar billede hugopedersen Nybegynder
31. oktober 2003 - 11:26 #5
Forudsætning for at ovennævnte virker er selvfølgelig at der ikke startes en ny periode før en anden er afsluttet helt.
Avatar billede terry Ekspert
31. oktober 2003 - 11:28 #6
cant be far wrong!

SELECT tblPerioder.navn, tblPerioder.dato AS aktiv, tblPerioder.aktivitete, (SELECT TOP 1 P.dato from tblPerioder P where P.navn = tblPerioder.navn AND P.dato > tblPerioder.Dato and aktivitete = 2 ) AS passiv, DateDiff("d",[aktiv],[passiv]) AS perioden
FROM tblPerioder
WHERE (((tblPerioder.aktivitete)=1));
Avatar billede terry Ekspert
31. oktober 2003 - 11:28 #7
.
Avatar billede terry Ekspert
31. oktober 2003 - 11:30 #8
an dif we still need a passiv on the last date

SELECT tblPerioder.navn, tblPerioder.dato AS aktiv, tblPerioder.aktivitete, Nz((SELECT TOP 1 P.dato from tblPerioder P where P.navn = tblPerioder.navn AND P.dato > tblPerioder.Dato and aktivitete = 2 ),Date()) AS passiv, DateDiff("d",[aktiv],[passiv]) AS perioden
FROM tblPerioder
WHERE (((tblPerioder.aktivitete)=1));
Avatar billede hugopedersen Nybegynder
31. oktober 2003 - 11:50 #9
Hvis jeg tester din løsning Terry så kan jeg se 2 'problemer' i den
Du tager ikke hensyn til at det første forløb i eksemplet slutter med at blive arkiveret - jeg ved ikke om det har noget at sige.
Endvidere finder du samme slutdato for begge forløb i eksemplet.
Avatar billede terry Ekspert
31. oktober 2003 - 12:01 #10
I may be wrong Hugo but from the test data I am looking at I select the first passiv date > than the aktiv date.
RESULT

navn    aktiv    aktivitete    passiv    perioden
ib    01/01/2003    1    02/02/2003    32
ib    01/04/2003    1    01/08/2003    122
ib    01/09/2003    1    31/10/2003    60
Avatar billede terry Ekspert
31. oktober 2003 - 12:03 #11
I am not interested in "arkiveret" records only aktiv+passiv and if the last aktiv is still open I take the current date
Avatar billede terry Ekspert
31. oktober 2003 - 12:04 #12
not sure how you think this Hugo!

(Endvidere finder du samme slutdato for begge forløb i eksemplet)
Avatar billede terry Ekspert
31. oktober 2003 - 12:21 #13
ib_nielsen>Its easier for us to help if you comment!
Avatar billede ibnielsen Seniormester
31. oktober 2003 - 12:35 #14
Vedr datoformatet kan jeg lave det der er brug for.
En periode går altid fra aktiv til passiv, arkiveringen har vi ikke brug for, så en periode går altid fra en aktiv dato til nænst dato der er passiv.
Jeg har siddet og tygget på jeres svar, og jeg er ikke skrap til sådanne koder, men det ser da ud til at de to første perioder er rigtige, jeg kan ikke rigtig forstå den sidste fra 1-9 til 31-10.
en person slutter med en aktiv er personen stadig aktiv, og så skal slut datoen være dd.
Det ser ud til at I har fat i noget der, jeg prøver lige at tjekke koden i min base, hvis jeg kan finde ud af det.
Avatar billede ibnielsen Seniormester
31. oktober 2003 - 12:44 #15
Jeg har prøvet det i min database, og miraklet er sket det virker.
I er simpelthen helt fantastiske.
Avatar billede hugopedersen Nybegynder
31. oktober 2003 - 12:44 #16
Jeg har indtastet de data som ib_nielsen har opgivet i sit spørgsmål og når jeg så prøver den sidste query, så får jeg 020203 som passiv på begge. Det forstår jeg ikke lige helt.

OK hvis arkiveret ikke skal bruges så er det ikke et issue.
Avatar billede terry Ekspert
31. oktober 2003 - 12:50 #17
The reason why the last period is 60 and not as you may be expecting 61, is because it is STILL 31st! In th ecase of th efirst two records we have gon epast the passiv date so it is alos included in the calcualtion.
Avatar billede hugopedersen Nybegynder
31. oktober 2003 - 12:51 #18
Det var åbenbart en fejl i mit datoformat - nu får jeg også dit resultat Terry.
Avatar billede terry Ekspert
31. oktober 2003 - 12:51 #19
but you can always add 1 day if necessary!
SELECT tblPerioder.navn, tblPerioder.dato AS aktiv, tblPerioder.aktivitete, Nz((SELECT TOP 1 P.dato from tblPerioder P where P.navn = tblPerioder.navn AND P.dato > tblPerioder.Dato and aktivitete = 2 ),Date()+1) AS passiv, DateDiff("d",[aktiv],[passiv]) AS perioden
FROM tblPerioder
WHERE (((tblPerioder.aktivitete)=1));
Avatar billede ibnielsen Seniormester
31. oktober 2003 - 13:03 #20
jeg h
Avatar billede ibnielsen Seniormester
31. oktober 2003 - 13:03 #21
jeg håber jeg har givet point. Det er meget fortjent
Avatar billede terry Ekspert
31. oktober 2003 - 13:07 #22
tak :o)
Avatar billede terry Ekspert
31. oktober 2003 - 17:30 #23
glad to hear you also got it working Hugo, I get nervous when people dont get the same result as me :o)

og god weekend alle sammen!
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