我需要通过在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
答案 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;
请注意,如果有多个行距离最短,则返回两者
编辑:
正如您在评论中所说的那样,如果只想要一列和MIN距离,您可以使用MIN和GROUP BY轻松完成:
SELECT city, MIN(distance)
FROM table2
GROUP BY city;
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