2013-02-05 32 views
1

我在sql中写了一个查询,在那里我只保留一次Companies.ID,这就是为什么我使用Distinct。区别在SQL中选择并排序

SELECT DISTINCT Companies.ID, Companies.Company, Abo.Ende 
FROM Companies 
LEFT JOIN Abo on Companies.ID = Abo.CompanyID 
ORDER BY Abo.Ende 

表Abo.Ende有多个条目的Abo.CompanyID,我想获得的结果与最近Abo.Ende独特Companies.ID。注意:Abo.Ende是一个日期时间字段,我想获得最新的。

我想知道这是否是最好的方式来做到这一点。有另一种方法吗?

回答

4

你需要group by,不distinct

SELECT Companies.ID, Companies.Company, max(Abo.Ende) 
FROM Companies 
LEFT JOIN Abo on Companies.ID = Abo.CompanyID 
GROUP BY Companies.ID, Companies.Company 

一个评论对您DISTINCT用法:

DISTINCT整个行操作。所以它会在一行中返回所有列值的不同组合。如果你包含一个PK列(在你的案例中可能是​​),distinct将不会“删除”任何行,因为PK根据定义是唯一的,并且如果一列在所有行中都是唯一的,则结果的所有列都是“唯一” (在DISTINCT运算符的意义上)。

+0

谢谢你很多。我想知道我是否可以只使用GROUP By Companies.Company,因为它给了我一个错误。 –

+0

@DimitraMicha:您必须列出“GROUP BY”中的所有非聚合列。 –

+0

非常感谢您的评论。我一定误解了Distinct的用法。 –

1

尝试:

SELECT Companies.ID, 
     Companies.Company, 
     MAX(Abo.Ende) AS Ende 
FROM Companies 
LEFT JOIN Abo on Companies.ID = Abo.CompanyID 
GROUP BY Companies.ID, 
     Companies.Company 
+0

对不起,我必须接受第一个:) –

1
SELECT Companies.ID, Companies.Company, max(Abo.Ende) 
FROM Companies 
LEFT JOIN Abo on Companies.ID = Abo.CompanyID 
GROUP BY Companies.ID, Companies.Company