Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 需要选择查询_Sql_Sql Server_Select - Fatal编程技术网

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上有一个索引。--我没有数字,但不久前当子查询挂起时,平局断路器为我工作。