Antworten auf deine Fragen:
Neues Thema erstellen

Erledigt - SQL Abfrage gruppieren und kleinsten Wert filtern

Hansi05

Aktives Mitglied

Hallo,

ich habe eine Tabelle in meiner DB, in der mehrere Filialen samt der Koordinaten für den Standort gelistet sind. Jetzt bin ich dabei eine Abfrage zu bauen, die anhand der eingegebenen Koordinaten die jeweils nächste Filiale eines Unternehmens ausliest. Die Abfrage sieht verkürzt so aus:
Code:
SELECT unternehmen, filiale, (BERECHNUNG) AS distance FROM Filialen ORDER BY distance ASC
Das Problem ist jetzt, dass hier von einem Unternehmen mehrere Filialen auftauchen können. Ich will aber von den 5 Unternehmen, nur die jeweils nächste Filiale. Wenn ich die Abfrage um einen "GROUP BY unternehmen" erweitere, bekomme ich aber nicht mehr die Filiale mit dem geringsten Abstand.
Mir fällt jetzt aber nur folgende Umgehungslösung ein:
Alle Unternehmen in der DB gelistet sind abfragen, sodass ich eine Liste mit den IDs der Unternehmen habe. Danach für jede ID die Abfrage durchführen:
Code:
SELECT unternehmen, filiale, (BERECHNUNG) AS distance FROM Filialen WHERE unternehmen = ID ORDER BY distance ASC LIMIT 1
Kann ich das alles aber auch irgendwie in eine Abfrage zusammenfassen? Ich stehe da auf dem Schlauch ... (fraglich ist natürlich auch, ob eine "komplizierte" Abfrage schneller ist als mehrere einfache ... Aber das muss man einfach mal testen :D).

Danke schon mal für eure Hilfe!
 

msa1989

Bin da

Ich glaube dass hier die Lösung zu deiner Fragestellung ist:
http://stackoverflow.com/questions/5021693/distinct-for-only-one-column

Code:
SELECT *
  FROM (
                SELECT  ID,
                        Email,
                        ProductName,
                        ProductModel,
                        ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn
                    FROM Products
                   WHERE ProductModel = 2
                     AND ProductName LIKE 'CYBER%'

              ) a
WHERE rn = 1

Das musst du jetzt nur noch an deine Abfrage anpassen.

Weiterhin gibt es noch die "IN" Regel. z.B.:
Code:
SELECT * FROM myTable WHERE meineSpalte IN (
SELECT irgendwas FROM andereTabelle ...)
 

Duddle

Posting-Frequenz: 14µHz

Wenn du deine erste Anfrage
Code:
SELECT unternehmen, filiale, (BERECHNUNG) AS distance 
FROM Filialen 
ORDER BY distance ASC;
als Unterabfrage nimmst, kannst du problemlos ein GROUP BY draufwerfen:

Code:
SELECT ttt.*
FROM (
   SELECT unternehmen, filiale, (BERECHNUNG) AS distance 
   FROM Filialen 
   ORDER BY distance ASC;
) ttt
GROUP BY ttt.unternehmen;


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.635
Beiträge
1.538.449
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben