2011-02-18 93 views
1

房屋SQL与给定的名称只选择第一

id OwnerId street 
----------------------- 
1 owner1  street1 
2 owner2  street1 
3 owner3  street2 
4 owner4  street2 
5 owner5  street3 

正如你可以看到有可能是在同一条街上更多的业主

我还有一个表,其中我想从Houses表中插入业主,但只有一个来自每个街道

结果查询:

表StreetRepresentant

ownerId street 
------------------ 
owner1  street1 
owner3  street2 
owner5  street3 

ownerId是表中的PK,如果它很重要。 OwnerId在表Houses)的唯一

查询应该是这样的:

INSERT INTO StreetRepresentant (ownerId , street) 
SELECT ownerId , street 
FROM Houses 
--what should be here to get only 1 owner for each street? ... 
+0

您使用的是什么RDBMS? – 2011-02-18 09:33:30

回答

3

可以组由街道,然后使用MIN()函数返回最低(按你的例子​​) ownerId为每条街道。

SELECT MIN(ownerId) , street 
FROM Houses 
GROUP BY street 
+0

ownerID不是int。它是varchar什么聚合函数可以用来代替min? – Ryan 2011-02-18 09:57:41

0
INSERT INTO StreetRepresentant (ownerId , street) 
SELECT ownerId , street 
FROM Houses h 
GROUP BY h.street, h.ownerId 
+0

由两者分组? OP每街只需要1个业主。 – 2011-02-18 09:40:32

+0

@The Scrum Meister:GROUP BY`应该与`SELECT`兼容,否则你会得到一个错误。 – Sarfraz 2011-02-18 09:41:42

+0

您的查询将为street1返回3行,因为有3个不同的所有者。请阅读OP。 – 2011-02-18 09:43:11

0

看一看像

SELECT Street, 
     MIN(ID) FirstAvailableID 
FROM Houses 
GROUP BY Street 
0

使用DISTINCT关键字的同时选择行,希望它会工作。