查找每个组的最大(S)

问题描述 投票:0回答:2

我有一个关于城市看起来像这样之间的航班信息的表:

origin_city dest_city   time    
Dothan AL   Atlanta GA    171       
Dothan AL   Elsewhere AL    2      
Boston MA   New York NY     5    
Boston MA   City MA         5    
New York NY Boston MA       5        
New York NY Poughkipsie NY  2

我想返回,每个起点城市,最大飞行时间和目的地城市或与之相伴的城市。所以,结果是这样的:

Dothan AL    Atlanta GA    171
Boston MA    New York NY   5
Boston MA    City MA       5
New York NY  Boston MA     5

基于其他线程,就像Reason for Column is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause,我写了一个返回从每个起点城市最大飞行时间查询:

SELECT DISTINCT   F.origin_city AS origin_city, Max(F.actual_time) AS actual_time
FROM     Flights AS F
GROUP BY F.origin_city
ORDER BY F.origin_city

但我得到的各种错误,当我尝试包括匹配时间目标(S)。例如:

SELECT DISTINCT   F.origin_city AS origin_city, Max(F.actual_time) AS actual_time, F.dest_city AS dest_city
FROM     Flights AS F
GROUP BY F.origin_city
HAVING
    (MAX(F.actual_time) = F.actual_time)
ORDER BY F.origin_city
GO

......给我的错误“列Flights.actual_time',因为它不是在聚合函数或GROUP BY子句是包含在HAVING子句中无效。”我尝试添加F.actual_time到组通过,但后来我得到吨的结果,因为我得到的最大飞行时间为每个起点/终点对(我认为)。此外,actual_time场应包含在聚合函数:最大。

此代码:

SELECT F.origin_city AS origin_city, Max(F.actual_time) AS actual_time, F.dest_city AS dest_city
FROM Flights as F
WHERE F.actual_time IN (SELECT MAX(actual_time) FROM Flights AS F2 GROUP BY F2.origin_city) 
GROUP BY F.origin_city

给出了一个类似的错误:因为它不是在聚合函数或GROUP BY子句中包含列“Flights.dest_city”在选择列表中无效。

我怎样才能正确地返回所有3列?

sql sql-server subquery
2个回答
0
投票

你想RANK()

SELECT F.*
FROM (SELECT F.*,
             RANK() OVER (PARTITION BY origin_city ORDER BY time DESC) AS SEQ
      FROM Flights AS F
     ) F
WHERE SEQ = 1;

如果我和你的版本去的话,我会做:

SELECT F.*
FROM Flights as F
WHERE F.actual_time = (SELECT MAX(F2.actual_time) 
                       FROM Flights AS F2 
                       WHERE F2.origin_city = F.origin_city
                      ); 

GROUP BY是两个outersubquery实际上是不必要的,只是通过outer queryF.origin_citysubquery)引用(F2.origin_city),使其相关子查询。


0
投票

你可以加入你已经表qazxsw POI匹配从Flights的qazxsw POI列,qazxsw POI从查询到origin_city查询:

actual_time
© www.soinside.com 2019 - 2024. All rights reserved.