2016-10-11 1 views
0

Ich habe eine Tabelle, die die Spalten:Wie erhalte ich nur die geografische Breite und Länge für die ‚kleinsten‘ zip

  • zip
  • Stadt
  • Zustand
  • Zeitzone
  • Breite
  • Länge
  • dst

Für das Verfahren ich auf ich arbeiten müssen die city, state, latitude und longitude basierend auf dem min(zip) gruppiert nach city zurückzukehren. Für die folgenden Zeilen in der Tabelle benötige ich die Prozedur, um die Zeile mit der Postleitzahl 18101 zurückzugeben. Dies müsste für jede Stadt in dieser Tabelle durchgeführt werden.

zip  city  state timezone latitude longitude dst 
18106 Allentown PA  -5   40.56929 -75.58893 1 
18195 Allentown PA  -5   40.57983 -75.57989 1 
18175 Allentown PA  -5   40.58556 -75.62106 1 
18103 Allentown PA  -5   40.5951  -75.45915 1 
18104 Allentown PA  -5   40.602  -75.52104 1 
18101 Allentown PA  -5   40.60285 -75.47022 1 
18102 Allentown PA  -5   40.60775 -75.4793 1 
18105 Allentown PA  -5   40.69337 -75.47115 1 

Gibt es eine andere Art und Weise (effiziente) als die min(zip) zuerst gruppierte finden, indem city dann mit, dass zip in einem separaten wählen, den Rest zu bekommen?

Antwort

4

Ein Verfahren verwendet row_number():

select z.* 
from (select z.*, 
      row_number() over (partition by city, state order by zip asc) as seqnum 
     from zips z 
    ) z 
where seqnum = 1; 
1

Sie können dies auch mit einer Unterabfrage:

select city, state, latitude, longitude 
from Table A 
where zip = (select min(zip) from Table b where a.City = b.City) 

Edit: Format

Verwandte Themen