Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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/4/sql-server-2008/3.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 Server:使用附加数据获取一系列值之间的最大值_Sql_Sql Server 2008_Aggregate - Fatal编程技术网

SQL Server:使用附加数据获取一系列值之间的最大值

SQL Server:使用附加数据获取一系列值之间的最大值,sql,sql-server-2008,aggregate,Sql,Sql Server 2008,Aggregate,大多数人想要最大值,但我需要一个范围内的最大值加上额外的数据。例如,我有一个团队及其经理及其经理id的列表。我查看了google/stackoverflow,但大多数人只想要最大值,但我也需要其他列,这就是我问这个问题的原因 表1: team mgr_level mgr_id ----------------------- aa 1 111 aa 2 222 aa 3 333 bb 1 1

大多数人想要最大值,但我需要一个范围内的最大值加上额外的数据。例如,我有一个团队及其经理及其经理id的列表。我查看了google/stackoverflow,但大多数人只想要最大值,但我也需要其他列,这就是我问这个问题的原因

表1

team  mgr_level mgr_id
-----------------------
aa     1          111
aa     2          222 
aa     3          333
bb     1          111
bb     2          222
cc     1          111
cc     2          222
cc     3          444 
cc     4          888 
employee       emp_id   team
------------------------------
smith, mary      23     aa
jones, john      34     bb 
ramjet, roger    98     cc
james, adam      111    mgr_team
green, rachel    222    mgr_team
bruin, breezly   333    mgr_team
runner, road     444    mgr_team
potter, harry    888    mgr_team
表2

team  mgr_level mgr_id
-----------------------
aa     1          111
aa     2          222 
aa     3          333
bb     1          111
bb     2          222
cc     1          111
cc     2          222
cc     3          444 
cc     4          888 
employee       emp_id   team
------------------------------
smith, mary      23     aa
jones, john      34     bb 
ramjet, roger    98     cc
james, adam      111    mgr_team
green, rachel    222    mgr_team
bruin, breezly   333    mgr_team
runner, road     444    mgr_team
potter, harry    888    mgr_team
我需要使用其他数据(团队和经理id)选择介于222和444之间的最大值(经理id)

结果如下所示。有没有办法一步完成而不是两步完成

name           team   primary_mgr_id  manager_name
-----------------------------------------------
smith, mary     aa      333           bruin, breezly
jones, john     bb      222           green, rachel  
ramjet, roger   cc      444           runner, road
我尝试了这个方法,SQL Server不断为每个名称返回多行:我做错了什么

select max(mgr_id) as [primary_mgr_id], t2.employee, t1.mgr_id
from table2 t2
inner join table1 t1 on t2.team = t2.team
group by t2.employee, t1.mgr_id
谢谢你的帮助。
斯文这就是你要找的人吗

SELECT
    employee AS name, team, max_mgr_id AS primary_mgr_id, t3.employee as manager_name
FROM
    table2 t2
JOIN (
    SELECT team, MAX(mgr_id) AS max_mgr_id
    FROM table1
) t1 ON t2.team = t1.team
JOIN table2 t3 ON t3.emp_id = t1.max_mgr_id AND t3.team = 'mgr_team'
一个选项是借助行号()

返回

Name            Team    primary_mgr_id  manager_name
smith, mary     aa      333             bruin, breezly
jones, john     bb      222             green, rachel
ramjet, roger   cc      444             runner, road
另一个选项是使用交叉应用


我会使用
外部应用

select t2.*, t1.mgr_id as primary_mgr_id , t1.name as manager_name
from table2 t2 outer apply
     (select t1.mgr_id, tt2.name
      from table1 t1 join
           table2 tt2
           on t1.mgr_id = tt2.emp_id
      where t1.team = t2.team and
            t1.mgr_id between 222 and 444
      order by t1.mgr_id desc
     ) t1;

我加上去了!谢谢,我忘记加了