1

我在 sql 中编写了一个查询,我将只保留一次 Companies.ID,这就是我使用 Distinct 的原因。

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

3 回答 3

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 列(可能companies.id在您的情况下), distinct 不会“删除”任何行,因为 PK 根据定义是唯一的,如果一列在所有行中都是唯一的,那么结果的所有列都是“唯一的”(在DISTINCT操作员的意义上)也是如此。

于 2013-02-05T11:30:21.183 回答
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
于 2013-02-05T11:31:26.533 回答
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
于 2013-02-05T11:42:15.413 回答