[SQL] laagste verschil

Pagina: 1
Acties:

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
Mensen...!

Gisterenavond een etentje gehad, en volgens mij is het iets te gezellig geweest, want hier kom ik even niet uit... 8)7.

Het volgende: ik heb een tabel met GPS posities van een auto. En ik heb een tabel met postcodes die bij bepaalde GPS posities horen. Wat wil ik nou? Eigenlijk heel simpel: ik wil een query die voor mij de postcode ophaalt van de plaats waar het verschil van de GPS positie van de auto en de GPS positie in de postcode-tabel het kleinste is. Maar ik krijg hem er ff niet uit!

Ik heb eerste geprobeerd met de MIN() en een betwee statement etc... Maar dat wilde vandaag ff niet. Ook google (groups) wilde me hier niet bij helpen. En op GoT vond ik wel heeeeel veel over SQL, maar nou net niet datgene wat ik zoek...

Iemand hier een idee...?

PS de SQL statement waar ik nu mee zit is de volgende. Ik weet dat die MIN niet op de juiste plaats staat, maar ik krijg hem ook niet in een where ofzo....
SQL:
1
2
3
4
5
6
7
SELECT 
  tblPostcodeGps.PC4, 
  Min([StopPositie]-[tblPostcodeGPS].[lat]) AS Verschil 
FROM 
  tblPostcodeGps 
GROUP BY 
  tblPostcodeGps.PC4

Deze retourneert echter alle regels en dus ook alle verschillen!

[ Voor 1% gewijzigd door OZ-Gump op 07-05-2003 09:36 . Reden: Lay-out f*cker ]

My personal website


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je zoekt een self join, dus 2x dezelfde tabel in je from clausule.

Who is John Galt?


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
Hmm... ik geloof niet dat ik er daarmee kom. Heb wel net even gezocht op je term SELF JOIN, maar het probleem zit hem dan volgens mij in het feit dat het veld verschil een berekend veld is, welke dus niet standaard in die tabel zit. Waardoor je er volgens mij ook niet op kunt joinen?

Of is het de bedoeling een sub-query te maken welke ik dan bijvoorbeeld als PC1 gebruik en dat ik dan die weer join?

My personal website


Verwijderd

Ik heb geen idee, of dit werkt, maar ik zou zelf in zo'n richting zoeken:
SQL:
1
2
3
4
SELECT PC4, [StopPositie]-[tblPostcodeGPS].[lat] AS Verschil
FROM tblPostcodeGps
WHERE 
[StopPositie]-[tblPostcodeGPS].[lat] = min(SELECT [StopPositie]-[tblPostcodeGPS].[lat] from tblPostcodeGps)

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
El.Greco: helaas, dat wilde ik ook proberen. Maar je mag geen MIN gebruiken in de where blijkbaar. Tenminste, de Access database waarop ik het uitprobeer wil daar niet mee aan de slag...

My personal website


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Met een Self join lukt het denk ik ook niet aangezien dit eigenlijk alleen interessant is om eventuele redudantie van gegevens aan te tonen.
Wat je zou kunnen proberen is te ordenen op het verschil tussen de gps waardes van de twee tabellen (eventueel met een limit om slechts een record over te houden)

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21-08 21:44

MBV

Kan je niet ORDER BY Verschil gebruiken, en dan bijv. LIMIT(0,1) (weet het, is MySQL, maar ik denk dat er wel een standaard voor is).

En de oplossing hierboven: ik denk dat hij zo niet gaat werken, maar dat je de tabellen een eigen naam moet geven. Bijv. TblPostcodeGps X en TblPostcodeGps Y. Anders gaat hij 2x dezelfde vragen.
edit:
de tweede mag dus niet, ik zou die order by eens gebruiken :)


Suc6

[ Voor 12% gewijzigd door MBV op 07-05-2003 10:01 ]


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Die self join moet een carthetisch produkt opleveren, daarna gaat de group by en vervolgens wellicht een having.

Who is John Galt?


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
devraux: ook dat gaat niet werken (ik ben echt vervelend...) omdat de verschillen ook in het negatieve lopen.
Ik zou natuurlijk de absolute waarde van het verschil kunnen pakken en die vervolgens kunnen limiten. Da's misschien nog helemaal geen slecht idee..!

My personal website


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Topicstarter
OK, many thanks to all who helped. And a special thank you to devraux ;) : hij schopte me de juiste richting in. De uiteindelijke oplossing is dus geworden het opzoeken van het absolute verschil, daarop sorteren en een SELECT TOP 1 in plaats van een normale select. De query zoals hij geworden is:

SQL:
1
2
3
4
5
6
SELECT 
  TOP 1 tblPostcodeGps.PC4, Abs([StopPositie]-tblPostcodeGPS.lat) AS Verschil
FROM 
  tblPostcodeGps
ORDER BY 
  Abs([StopPositie]-tblPostcodeGPS.lat)

[ Voor 1% gewijzigd door OZ-Gump op 07-05-2003 10:19 . Reden: typo ]

My personal website


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

...niet meer nodig ;)

[ Voor 86% gewijzigd door DeverauX op 07-05-2003 10:13 ]

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones

Pagina: 1