Avatar billede vanggaard Nybegynder
30. januar 2002 - 21:06 Der er 18 kommentarer og
1 løsning

lidt speciel select

Hej
Jeg vil gerne lave en lidt speciel select, her er hvordan min db ser ud.
tabel1 har følgende felter:
navn: text
nummer: int

Tabel2 har følgende felter:
nummer: int
sdato: date

I tabel2 er der flere med samme nummer men forskellige sdato.
Det jeg gerne vil er at lave en "select" hvor jeg får navn og den højeste sdato og de to tabeller skal mantches sammen med nummer.

Eks:
Tabel1
mads 1
Henrik 2
Søren 3

Tabel2
1 2-3-2002
1 6-3-2002
2 7-1-2001
3 8-4-2000
3 9-9-2001
3 1-10-2002

Med min "select" vil jeg gerne ha' følgende resultat:
mads 6-3-2002
henrik 7-1-2001
søren 1-10-2002

Er der nogen som kan hjælpe????

På forhånd tak.
Mads
Avatar billede entracore Nybegynder
30. januar 2002 - 21:21 #1
SELECT Tabel1.Navn, Max(Tabel2.sDato) AS MaxOfsDato
FROM Tabel1, Tabel2
GROUP BY Tabel1.Navn;
Avatar billede terry Ekspert
30. januar 2002 - 21:26 #2
SELECT tabel1.navn, Max(tabel2.dato) AS MaxOfdato
FROM tabel1 INNER JOIN tabel2 ON tabel1.nummer = tabel2.nummer
GROUP BY tabel1.nummer, tabel1.navn;
Avatar billede terry Ekspert
30. januar 2002 - 21:27 #3
dato = sdato !
Avatar billede proaccess Nybegynder
31. januar 2002 - 08:28 #4
>entracore: Du får altid samme MaxOfsDato (for alle navne, da du ikke sammenkæder dit join). Hvis du endelig vil have ,-join så skal du huske at sige WHERE tabel1.nummer=tabel2.nummer, for at den vil virke efter hensigten...

>Terry: Nice work!
Avatar billede terry Ekspert
31. januar 2002 - 10:08 #5
thanks proaccess! Its easy with Access query builder :o)

SQL is NOT my strong side, but I tend to manage with the tools we have, although I doubt that I always find the fastest solution.
Avatar billede terry Ekspert
02. februar 2002 - 14:42 #6
vanggaard>hows it going?
Avatar billede vanggaard Nybegynder
03. februar 2002 - 22:54 #7
not good
The tip from Terry worked on my example but, my example was too simple.
Table 2 is actual like this:
Tabel2
1 2-3-2002 a
1 6-3-2002 b
2 7-1-2001 b
3 8-4-2000 b
3 9-9-2001 a
3 1-10-2002 b

And my select select shall return
name, newest date for the person and if the newest date is an a or b date.

Hope somebody (maybe terry :)) can help me

Vanggaard
Avatar billede terry Ekspert
04. februar 2002 - 08:10 #8
vanggaard>I dont mind taking a look at the EXTRA question, but the answer I gave was for the ORIGINAL question.

SELECT tabel1.navn, Max(tabel2.dato) AS MaxOfdato, First(tabel2.AorBfld) AS AorB
FROM tabel1 INNER JOIN tabel2 ON tabel1.nummer = tabel2.nummer
GROUP BY tabel1.nummer, tabel1.navn;
Avatar billede terry Ekspert
04. februar 2002 - 08:11 #9
You obvioulsy need to alter AorBfld to the correct name!
Avatar billede proaccess Nybegynder
04. februar 2002 - 08:14 #10
>Terry: that second SQL (08:10:10) is wrong, you get the first AorB of each person wheather or not it's the one from the newest time...
Avatar billede proaccess Nybegynder
04. februar 2002 - 08:17 #11
SELECT tabel1.navn, tabel2.dato, tabel2.AorB FROM tabel1 INNER JOIN tabel2 ON tabel1.nummer = tabel2.nummer WHERE tabel2.dato=(SELECT Max(Dato) FROM Tabel2 WHERE nummer=tabel1.nummer)
Avatar billede terry Ekspert
04. februar 2002 - 08:18 #12
I was a bit unsure as to whethe or or not it was OK, I normally check my work but didnt bother today :o( perhaps you should post an aanswer and vanggaard should UP the points :o)
Avatar billede terry Ekspert
04. februar 2002 - 08:19 #13
That looks fine :o)
Avatar billede vanggaard Nybegynder
04. februar 2002 - 10:12 #14
proacces> Are you sure about the answer (08:14:44) ? If I use the select I get an empty answer :(
terry> I'll give all of you 100 point when I have solve my problem. OK?
Avatar billede terry Ekspert
04. februar 2002 - 10:17 #15
OK :o)
Avatar billede proaccess Nybegynder
04. februar 2002 - 10:20 #16
SELECT Tabel1.navn, Tabel2.sdato, Tabel2.type FROM Tabel1 INNER JOIN Tabel2 ON Tabel1.nummer=Tabel2.nummer WHERE Tabel2.sdato=(SELECT MAX(sdato) FROM Tabel2 WHERE nummer=Tabel1.nummer)

det kan være der var en fejl i navnet på dit datofelt... hér hedder det sdato. ellers skulle den være rigtig!
Avatar billede proaccess Nybegynder
04. februar 2002 - 10:22 #17
Hvis du ikke bruger Acc2000, så kan du heller ikke bruge SUB-SELECT på den måde...

så må du prøve med:

SELECT Tabel1.navn, Tabel2.sdato, Tabel2.type FROM Tabel1 INNER JOIN Tabel2 ON Tabel1.nummer=Tabel2.nummer WHERE Tabel2.sdato=DMax('(sdato)','Tabel2','nummer=' & Tabel1.nummer);
Avatar billede vanggaard Nybegynder
04. februar 2002 - 10:28 #18
Jeg tror sgu' det virker nu.... Jeg brugte proaccess svar (08:17:45) med en lille ændring. Istedet for SELECT Max(sdato) FROM Tabel2...... skrev jeg SELECT Max(tabel2.sdato) FROM Tabel2 og nu ser det ud til at virke.
Jeg laver lige lidt test og vender tilbage
Avatar billede vanggaard Nybegynder
04. februar 2002 - 19:04 #19
terry> I have made a new question so you can get your 100 points

Mange tak for hjælpen, det virker bare :)
Jeg har dog et lille spg til hvordan jeg kan udvide den SELECT, men det har jeg lavet et nyt spq til.
Vanggaard
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