Avatar billede sigyn Seniormester
28. oktober 2011 - 09:15 Der er 14 kommentarer og
1 løsning

Find gyldige version

Jeg har en tabel der letterer simplificeret kunne se sådan ud

Navn    Version    Gyldig
A    1    ja
A    2    nej
A    3    ja
B    1    ja
C    1    ja
D    1    ja
D    2    nej
D    3    ja
D    4    nej

Det der er lidt tricky, er at når der bliver oprettet en ny version, forbliver version 1 gyldig, version 2 er "sletningen af 1'eren" og version 3 så den rigtige gyldige. Hvis den så bliver nedlagt er version 4 så sletningen af version tre
Jeg har hidtil kun søgt på maks af gyldige version, for at have den seneste gyldige udgave, men hvis jeg kun skal have den seneste eksisterende og gyldige udgave, hvad skal jeg så gøre?
I ovennævnte eksempel skulle jeg gerne ende jeg ende ud med en tabel der ser sådan ud

Navn    Version    Gyldig
A    3    ja
B    1    ja
C    1    ja

Vi snakker Access2000
Avatar billede hugopedersen Nybegynder
28. oktober 2011 - 09:26 #1
SELECT Table1.navn, Min(Table1.version) AS MinOfversion, Table1.gyldig
FROM Table1
GROUP BY Table1.navn, Table1.gyldig
HAVING (((Table1.gyldig)=True));
Avatar billede hugopedersen Nybegynder
28. oktober 2011 - 09:26 #2
Det viser dig det højeste gyldige versionsnummer for hvert navn
Avatar billede Slettet bruger
28. oktober 2011 - 10:02 #3
SELECT T1.Navn, T1.Version, T1.Gyldig
FROM Table1 AS T1
WHERE T1.Version IN (SELECT Max(Table1.version) AS MaxOfversion
FROM Table1
GROUP BY Table1.navn
HAVING (((Table1.navn)=T1.Navn)))
GROUP BY T1.Navn, T1.Version, T1.Gyldig
HAVING (((T1.Gyldig)=True));
Avatar billede sigyn Seniormester
28. oktober 2011 - 10:02 #4
Der skal vist stå max istedet for min ;-)
Men det løser ikke mit problem, for jeg vil jo netop ikke have version 3 af D med fra ovenstående tabel
Avatar billede hugopedersen Nybegynder
28. oktober 2011 - 10:10 #5
Selvfølgelig skal det være Max :-)

Og når jeg køre min forespørgsel på dine eksempeldata, så får jeg:

a    3    True
b    1    True
c    1    True
d    3    True
Avatar billede hugopedersen Nybegynder
28. oktober 2011 - 10:13 #6
Men hvis jeg forstår dig ret, så vil du ikke have D med fordi der er en record med højere version end den sidst aktive - er det korrekt?
Avatar billede hugopedersen Nybegynder
28. oktober 2011 - 10:14 #7
Og i så fald er det som SPG skriver at du skal gribe det an.
Avatar billede sigyn Seniormester
28. oktober 2011 - 10:33 #8
hugopedersen, det er korrekt, at jeg ikke vil have D med

SPG, du er lige nødt til, at skære det lidt mere ud i pap, jeg er ikke så hård til det der SQL, som jeg gerne ville være. Hvad er T1?
Avatar billede Slettet bruger
28. oktober 2011 - 10:39 #9
Hvis du har Table1 med felterne navn(tekst), version(tal) og gyldig(ja/nej) saa virker SQL'en...

Ang. dit specifikke spm.: FROM Table1 AS T1 betyder bare at i hoved SQL'en navngiver jeg Table1 T1.
Avatar billede sigyn Seniormester
28. oktober 2011 - 11:00 #10
version er godt nok tekst (det er trukket ud fra et andet system), men det virker med Max, og je/nej er også tekst, men der må "Ja" vel være lige så godt som true, hvis det havde været ja/nej

Jeg bøvler lidt med paranteserne i denne:
WHERE T1.Version IN (SELECT Max(Table1.version) AS MaxOfversion

Der er enten en for meget, hvilken ? eller en for lidt, hvor ? De steder jeg har prøvet med en ekstra, får jeg en syntaksfejl
Avatar billede Slettet bruger
28. oktober 2011 - 11:20 #11
Er det denne forespoergsel du arbejder med..

SELECT T1.Navn, T1.Version, T1.Gyldig
FROM Table1 AS T1
WHERE (((T1.Version) In (SELECT Max(Table1.version) AS MaxOfversion
FROM Table1
GROUP BY Table1.navn
HAVING (((Table1.navn)=T1.Navn)))))
GROUP BY T1.Navn, T1.Version, T1.Gyldig
HAVING (((T1.Gyldig)="Ja"));
Avatar billede sigyn Seniormester
28. oktober 2011 - 11:25 #12
Jeg har fundet parantesen :-) den var liige et par linier længere nede, der havde jeg fjernet en, fordi det så ud som om der var en for mange. Men jeg har ikke lige helt fået det til at virke endnu, fatisk var der ingen hits, og så fik jeg lige slettet det hele. Så der går lige et øjeblik igen, inden jeg ved om det virker
Avatar billede sigyn Seniormester
28. oktober 2011 - 11:26 #13
Og ja, det er den, jeg arbejder med
Avatar billede sigyn Seniormester
28. oktober 2011 - 11:37 #14
Så fik jeg det hele tastet rigtigt, og det virker, så points og tak for hjælpen :-)
Avatar billede Slettet bruger
28. oktober 2011 - 11:47 #15
!~)
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