Sql 需要选择查询
考虑下表的数据结构-Sql 需要选择查询,sql,sql-server,select,Sql,Sql Server,Select,考虑下表的数据结构- AdjusterID | CompanyID | FirstName | LastName | EmailID ============================================================ 1001 | Sterling | Jane | Stewart | janexxx@sterlin.com 1002 | Sterling | David | Bo
AdjusterID | CompanyID | FirstName | LastName | EmailID
============================================================
1001 | Sterling | Jane | Stewart | janexxx@sterlin.com
1002 | Sterling | David | Boon | dav@sterlin.com
1003 | PHH | Irfan | Ahmed | irfan@phh.com
1004 | PHH | Rahul | Khanna | rahul@phh.com
============================================================
其中调节器ID是主键。一家公司的调整器数量为
我需要有一个查询,将列出每个公司的单一调整。i、 e.我需要尽快得到结果-
========================================================
1001 | Sterling | Jane | Stewart | janexxx@sterlin.com
1003 | PHH | Irfan | Ahmed | irfan@phh.com
========================================================
如果有人能帮助我,那就太好了。一种方法:
SELECT * FROM Adjusters
WHERE AdjusterID IN(SELECT min(AdjusterID)
FROM Adjusters GROUP BY CompanyID)
还有一些其他方法涉及联合和迭代,但这一种非常简单,可以让您开始
编辑:这假设您需要具有最低ID的调节器,根据您的示例我知道Jeremy给出的答案是有效的,因此我不会重复。但您可以使用所谓的平局断路器尝试另一种:
--//using a tie-breaker. Should be very fast on the PK field
--// but it would be good to have an index on CompanyID
SELECT t.*
FROM MyTable t
WHERE t.AdjusterID = (SELECT TOP 1 x.AdjusterID FROM MyTable x WHERE x.CompanyID = t.CompanyID ORDER BY AdjusterID)
就性能而言,这可能会更好。但更有用的是,如果您在表中有另一列,并且您希望不仅为每个公司选择一列,而且使用其他列排名作为标准为每个公司选择最佳列。因此,您可以按其他列排序,而不是按调整器ID排序。这真的更快吗?“我手头没有执行计划查看器,但我原以为关联子查询对于大型数据集来说会更慢?”Jeremy。如果性能不是你的问题,不要费心优化。但如果有适当的指标,平局破坏者应该更快。它肯定应该是在你的情况下,因为它是在PK(我猜是集群)。不过,对于这两个实现,您应该在CompanyID上有一个索引。--我没有数字,但不久前当子查询挂起时,平局断路器为我工作。