Avatar billede hirtshals Nybegynder
19. juni 2001 - 11:23 Der er 16 kommentarer og
2 løsninger

SQL Sætning Søges - Haster

Jeg har en tabel bestående af flg felter Navn - Dato -Resultat - Stadion

F.eks til brug ved en Spydkastkonkurence - hvergang en spydkaster har kastet laves der en record i databasen, databasen vil efter et stykke tid se således ud

Allan  15-06-2001  75 mtr Aarhus
Allan  14-06-2001  65 mtr Aarhus
Peter  15-06-2001  63 mtr  Kbh
Peter  15-06-2001  87 mtr  Kbh

Jeg vil nu finde MAX - det fik jeg hjælp til i spm

http://195.184.125.74/spm/82167

Men problemet er at løsningen ikke tager højde for DISTINCT dvs tilføjede jeg en ny record

Allan  12-06-2001  75 mtr Aarhus

Ville Query returnere

Allan  12-06-2001  75 mtr Aarhus
Allan  15-06-2001  75 mtr Aarhus
Peter  15-06-2001  87 mtr  Kbh

Jeg vil kun have den til at returnere

Allan  15-06-2001  75 mtr Aarhus
Peter  15-06-2001  87 mtr  Kbh

Nogle gode forslag


Tillægs spm (50 PTS) - kan man lave en count så resultatet så jeg får en count på Navne feltet returneret

Allan  15-06-2001  75 mtr Aarhus  3 (Antallet af Allan Records)
Peter  15-06-2001  87 mtr  Kbh    2 (Antallet af Peter Records)

Avatar billede proaccess Nybegynder
19. juni 2001 - 11:42 #1
Har du et enkelt ID felt, på hver record?

Eller er nøglen opsat af Navn, Dato, Sted...
Avatar billede hirtshals Nybegynder
19. juni 2001 - 12:12 #2
Jeg har et AutoNummer ID på hver record der er primary key
Avatar billede terry Ekspert
19. juni 2001 - 12:16 #3
Answer to your \'Tillægs spm\'.

SELECT mB.*, DCount(\'NavnID\',\'mindatabase\',\'navnID = \' & [NavnID]) AS Antal
FROM minDatabase AS mB
WHERE (((mB.Resultat)=(SELECT Max(Resultat) FROM minDatabase WHERE Navn=mB.Navn)));

But your still going to get duplicate records!!
Avatar billede hirtshals Nybegynder
19. juni 2001 - 12:28 #4
Tak Terry >> Tilføjede NavnID til databasen så Allan har NavnID = 1 & Peter NavnID = 2, så virker Count :-)

proaccess >> Nu har jeg et NavnID for hvert deltager - kan det bruges til at undgå dubletter - det er jo nemmere at styre på et nr end tekststreng



Avatar billede terry Ekspert
19. juni 2001 - 12:34 #5
Hi!
Just off the top of my head and with some help from proaccess\'s answer, so not sure if this is foolproof!

SELECT mB.*
FROM minDatabase AS mB
WHERE (((mB.Resultat)=(SELECT Max(Resultat) FROM minDatabase WHERE Navn=mB.Navn)) AND ((mB.dato)=(SELECT Max(Dato) FROM minDatabase WHERE Navn=mB.Navn)));
Avatar billede proaccess Nybegynder
19. juni 2001 - 12:36 #6
Det gør ingen forskel om du grupperer efter et tekstfelt eller et talfelt... MEN ved at benytte et tal, så kan du have flere springere, som hedder Peter.

Hvis du altså har navnene i en tabel for sig!!! - Din tabel må ikke se sådan ud:
NavnID, Navn, Dato, Resultat, Bynavn, ID

Jeg kigger videre på din forespørgsel !!!
Avatar billede proaccess Nybegynder
19. juni 2001 - 12:37 #7
Terry you are OFF... You just selected the latest date, weather it was a recordbreaking jump or not !!!
Avatar billede terry Ekspert
19. juni 2001 - 12:40 #8
proaccess its Javalin \'spydkaster\' and nothing to do with jumpers!!
Avatar billede proaccess Nybegynder
19. juni 2001 - 12:45 #9
That minor detail dosn\'t affect the database design and queries !!!
Avatar billede terry Ekspert
19. juni 2001 - 12:46 #10
hirtshals> As I said, I wasnt sure if it was foolproof, so forget my answer. If a shorter throw is registered at a later date then the longest throw isnt included (logical when I think about it!)
Avatar billede proaccess Nybegynder
19. juni 2001 - 12:47 #11
Prøv med denne:

SELECT mB.Navn, mB.Dato, mB.Resultat, mB.Bynavn, (SELECT Count(*) FROM minDatabase WHERE Navn=mB.Navn) AS Antal
FROM minDatabase as mB
WHERE ID = (SELECT Last(ID) FROM minDatabase AS mX WHERE mX.Resultat=(SELECT Max(Resultat) FROM minDatabase WHERE Navn=mX.Navn) AND Navn=mB.Navn)
Avatar billede terry Ekspert
19. juni 2001 - 12:48 #12
No, your right proaccess, but just infroming you of the fact!
Avatar billede terry Ekspert
19. juni 2001 - 13:03 #13
proaccess> (This is not to Criticize you) but if for some reason the registrations arent made in date order then LAST(ID) will fail!
hirthals\'s new record was fromthe 12th June so will actually be the last added!!!

ID    Navn    dato    Resultat    Bynavn
1    Allan    15/06/01    75    Aarhus
2    Allan    14/06/01    65    Aarhus
3    Peter    15/06/01    63    Kbh
4    Peter    15/06/01    87    Kbh
5    Allan    12/06/01    75    Aarhus
Avatar billede proaccess Nybegynder
19. juni 2001 - 13:09 #14
Yes, BUT one would assume that entries are made in dateorder...  And to avoid your next comment, then ID has to be added in ascending order (instead of random), to achieve this...

And Terry, I\'m NOT affended by you in any way, and I hope that we can benefit from each other in many years to come !!!  ;-)
Avatar billede hirtshals Nybegynder
19. juni 2001 - 13:17 #15
Ill Switch to English - i have just raised Point from 200 to 250, it is a very exciting discussion you have here - and me too hope to benefit from both of you marvellous SQL Knowledge in many years to come

And in \"real life\" entries are made in dateorder - i didnt mentioned anything about this - cause you newer know.. - But i can live happy with proaccess solution.

Terry you gave me and right answer to spm 2 . so ill give you the 50 pts - but so did Proaccess - that why i raised the score to 250 so i could give him the 200 pts he deserved -

But Thank you very much to the both of you - You both saved my day :-)

Avatar billede terry Ekspert
19. juni 2001 - 13:19 #16
Yes I know that ID\'s have to be added in ASC order, but even so, just taking hirthals\'s example data, he added an older date.
But if he can accept that he has to add the records in date order than thats fine!

Avatar billede terry Ekspert
19. juni 2001 - 13:24 #17
Many thanks hitshals, and I agree that proaccess deserves the 200.
Avatar billede proaccess Nybegynder
19. juni 2001 - 13:28 #18
And I sertanly agree that Terry was the one with the Count() !!!

Thx, and don\'t be a stranger - You don\'t have to offer 200 pts. every time!
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