Toon posts:

[Access/SQL] Query fout of bug?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Waar gaat dit fout, bij mij of bij access/sql

De tabel:
Afbeeldingslocatie: http://picserver.org/view_image.php/0JEX6O7SNQF3/picserver.jpeg

Hieruit wil ik de cellid’s selecteren waarbij “sg” de grootste coverage is.

De query:
code:
1
2
3
4
5
SELECT ([without bs].cellid), ([without bs].vegcode), ([without bs].coverage) 
FROM [without bs]
WHERE ((([without bs].coverage) 
IN (select max ([without bs].coverage) from [without bs] group by [without bs].cellid)) 
AND (([without bs].vegcode)="sg"));


Het resultaat:
E7-1 sg 30
E7-4 sg 50
E7-6 sg 20
E7-7 sg 40
E7-9 sg 15

De eerste 4 zijn goed. De laatste niet. Immers cellid E7-9 heeft ook coverages van: E7-9 tg 40 en E7-9 b 50. Die laatste 2 zijn beiden hoger als de coverage van sg bij die cellid, want die is dus 15.
Vreemd, vreemder nog als ik 15 in 16 of bijv 10 verander. Dan loopt hij wel normaal, bij 25 weer niet :S

Er zou dus iets mis moeten zitten in de query (of in access/SQL maar dat lijkt me niet) maar wat?

[ Voor 5% gewijzigd door Verwijderd op 22-12-2004 13:22 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Voor de duidelijkheid, wat hadden de laatste 2 rijen dan wel op moeten leveren? Je zegt nl. dat je de hoogste coverage van een sg per cellid wilt. Of lees ik nu niet goed?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:15
Waarom niet gewoon:
code:
1
2
3
4
select cellid, max(coverage)
from tabel
where vegcode = 'sg'
group by cellid

:?

Ik zie trouwens ook niet zo direct wat er niet goed is hoor, want je specifieert die 'vegcode = sg', en ik denk dat de resultaten gewoon geod zijn.

[ Voor 42% gewijzigd door whoami op 22-12-2004 13:26 ]

https://fgheysels.github.io/


  • ZeilDude
  • Registratie: Juli 2004
  • Laatst online: 19-02-2022
Mijn eerste ingeving: probeer alles nog eens, maar dan zonder spaties in de naamgeving van tabellen. Dit leidt vaak tot rare problemen en is ook gewoon niet erg netjes.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
ZeilDude schreef op woensdag 22 december 2004 @ 13:29:
Mijn eerste ingeving: probeer alles nog eens, maar dan zonder spaties in de naamgeving van tabellen. Dit leidt vaak tot rare problemen en is ook gewoon niet erg netjes.
Met [] eromheen moet dat geen rare gevallen opleveren hoor. Je hebt verder wel gelijk, spaties in objectnamen zijn niet handig.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • ZeilDude
  • Registratie: Juli 2004
  • Laatst online: 19-02-2022
En er staat een spatie na je 'max'.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je query klopt niet, je linkt de subquery niet terug aan de hoofdquery.

Who is John Galt?


  • mr_obb
  • Registratie: Juni 2001
  • Laatst online: 20-01 17:28

mr_obb

Lakse Perfectionist

code:
1
2
3
SELECT cellid, max(coverage)
FROM [without bs]
GROUP BY cellid;


Als je deze query uitvoert, komt daar 15 ook in voor bij E7-2. Aangezien 15 dus voorkomt in deze tabel, wordt E7-9 met waarde 15 ook meegenomen.

Verwijderd

Topicstarter
Bedankt voor de antwoorden. Ik ga ermee aan de slag. Maar moet eerst ff rennen om bus en trein te halen. Kijk er vanavond nog naar.

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:15
ZeilDude schreef op woensdag 22 december 2004 @ 13:35:
En er staat een spatie na je 'max'.
En dan ?

https://fgheysels.github.io/


  • ZeilDude
  • Registratie: Juli 2004
  • Laatst online: 19-02-2022
Dan niks, maar het is niet netjes. :)

On topic: ik zou ook niet 1-2-3 weten welke query je moet schrijven om bovenstaand resultaat te krijgen. Ik zou al snel gedeeltelijk met sql werken, en gedeeltelijk buiten de database, bijvoorbeeld in asp.

[ Voor 16% gewijzigd door ZeilDude op 22-12-2004 15:19 ]


Verwijderd

Topicstarter
Helaas ben ik onbekend met asp.
Maar ik dacht dat het wel mogelijk zou zijn door in een subquery te selecteren voor de max coverage per cellid en vervolgens daar de "sg" van te selecteren.

@Justmental: Hoe bedoel je: "Je linkt de subquery niet terug aan de hoofdquery?"

@mr_obb: Omdat bij het selecteren van de max (coverages) ook cellid E7-2 met tg 15 wordt geselecteerd pakt hij dus daarna in de hoofdquery ook E7-9 met sg 15...dus daar zou de fout moeten zitten volgens jou. Ik ga eens uitzoeken hoe ik dat op zou kunnen lossen.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je subquery selecteert de maximale coverage per cellid.
Je hoofdquery seleceert de gegevens waarbij de coverage een van de maximale coverages is.

In je subquery moet je dus aangeven dat je het over hetzelfde cellid wilt hebben.

Who is John Galt?


  • Haploid
  • Registratie: Maart 2002
  • Laatst online: 29-12-2021

Haploid

Doh!

Je zoekt meer iets in de trant van:
code:
1
2
3
4
select b.cellid
from [without bs] b
where b.vegcode="sg"
and b.coverage=(select max(b2.coverage) from [without bs] b2 where b2.cellid=b.cellid)

Van links naar rechts gelezen en vertaald naar NL:
Geef me de cellid waar vegcode "sg" is en coverage het maximum is van alle records met dezelfde cellid. Ik heb geen Access bij de hand, maar ik heb alle vertrouwen in deze query. B)
justmental schreef op donderdag 23 december 2004 @ 13:20:
Je subquery selecteert de maximale coverage per cellid.
Je hoofdquery seleceert de gegevens waarbij de coverage een van de maximale coverages is.
In je subquery moet je dus aangeven dat je het over hetzelfde cellid wilt hebben.
Dit is het grote probleem met jouw oorspronkelijke query.

[ Voor 34% gewijzigd door Haploid op 23-12-2004 18:32 ]

Hey, I came here to be drugged, electrocuted and probed, not insulted.


Verwijderd

Topicstarter
Ok.
Bedankt Justmental en Haploid. Ik heb het nog niet geprobeerd maar ga het zeker doen. Ik denk dat ik met jullie aanwijzingen, of zelfs de oplossing direct, er uit ga komen. Kan het helaas pas na kerst testen, aangezien mijn ouders geen access op de comp hebben :X
Pagina: 1