2017-06-01 3 views
1

Ich habe ein Problem beim Abrufen von Datensatz aus meiner Tabelle sagen PostCodeDistances. HierWählen Sie Daten durch Anwenden von Gruppe nach auf ein Feld und bestellen Sie nach anderen Feld

ist die Quelltabelle:

SourceId | PostCode | Distance 
-------- | ----------| --------- 
    1  | 200 | 4000 
    1  | 300 | 2000 
    1  | 400 | 1000 
    2  | 300 | 5000 
    2  | 400 | 3000 
    2  | 500 | 4000 

Was ich will einfach mit Ids führen mit einem Mindestabstand gruppiert. So sollte die Ausgabe wie:

SourceId | PostCode | Distance 
-------- | ----------| --------- 
    1  | 400 | 1000 
    2  | 400 | 3000 

Problem scheint einfach, aber mein Gedächtnis haften geblieben und kann ich nicht Lösung in der richtigen Art und Weise zu denken. Jede Hilfe würde sehr geschätzt werden.

Antwort

2

Hier ist eine Methode:

select top (1) with ties pcd.* 
from PostCodeDistances pcd 
order by row_number() over (partition by sourceId order by distance); 

Die traditionelle Methode verwendet Subqueries:

select pcd.* 
from (select pcd.*, 
      row_number() over (partition by sourceId order by distance) as seqnum 
     from PostCodeDistances pcd 
    ) pcd 
where seqnum = 1; 
+0

Dank für die schnelle Hilfe. Das habe ich gesucht. –

Verwandte Themen