选择具有最小值列的行

时间:2013-12-06 10:27:32

标签: sql-server tsql

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

ID  OrganisationID    Distance
0        10             100
1        10             200
3        10             50
4        20             80
5        20             300

这是我想要的结果:

ID  OrganisationID    Distance
3        10             50
4        20             80

2 个答案:

答案 0 :(得分: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;

sqlfiddle demo

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


编辑:

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

SELECT city, MIN(distance)
FROM table2
GROUP BY city;

sqlfiddle demo

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

答案 1 :(得分:0)

这是解决方案:

SELECT ID ,D.*
FROM <TABLE> INNER JOIN( SELECT OrganisationID 'OR',MIN(Distance) DI
FROM <TABLE>
GROUP BY OrganisationID) D
ON D.DI=<TABLE>.Distance

测试:

CREATE TABLE #T
(
ID INT,
OrganisationID INT,
Distance INT
)
INSERT INTO #T
SELECT 0,10,100
UNION ALL
SELECT 1,10,200
UNION ALL
SELECT 3,10,50
UNION ALL
SELECT 4,20,80
UNION ALL
SELECT 5,20,300
SELECT ID ,D.*
FROM #T INNER JOIN( SELECT OrganisationID 'OR',MIN(Distance) DI
FROM #T
GROUP BY OrganisationID) D
ON D.DI=#T.Distance
DROP TABLE #T