选择具有最小值列的行

And*_*Dev 4 t-sql sql-server

我需要通过在OrganisationID上分组来选择具有最小距离的行.这是我在单个表中的数据:

ID  OrganisationID    Distance
0        10             100
1        10             200
3        10             50
4        20             80
5        20             300
Run Code Online (Sandbox Code Playgroud)

这是我想要的结果:

ID  OrganisationID    Distance
3        10             50
4        20             80
Run Code Online (Sandbox Code Playgroud)

Fil*_*lva 7

这将实现:

SELECT t1.*
FROM yourTable t1
  LEFT JOIN yourTable t2
    ON (t1.OrganisationID = t2.OrganisationID AND t1.Distance > t2.Distance)
WHERE t2.OrganisationID IS NULL;
Run Code Online (Sandbox Code Playgroud)

sqlfiddle demo

请注意,如果有多个行距离最短,则返回两者


编辑:

如果你在评论中说只想要一列和MIN距离,你可以使用MIN和GROUP BY轻松完成:

SELECT city, MIN(distance)
FROM table2
GROUP BY city;
Run Code Online (Sandbox Code Playgroud)

sqlfiddle demo

ps我看到你之前删除的问题,并用不同于此的方式回答它(​​告诉你,因为你在WHERE子句中有了organisationID,你可以这样做:SELECT TOP 1 ... order by距离DESC),但是如果你需要更多的一个organisationID,这可以让你到那里)