采用Oracle中的最大相关值

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

我在Oracle 11g数据库中具有以下表:

CREATE TABLE travels
(
Day DATE,
Flight_Code VARCHAR2(7),
Airplane_Code VARCHAR2(7),
CONSTRAINT pk PRIMARY KEY(day,flight_code)
);

CREATE TABLE boardings
(
Passport VARCHAR2(7),
Day DATE,
Flight_Code VARCHAR2(7),
Luggage_Weight NUMBER(4,2),
CONSTRAINT pk PRIMARY KEY(passport,day,flight_code)
);

因此,我尝试进行查询,以查看每架飞机所运送的最大重量(Day和Flight_Code)是否为最大重量,该重量始终大于100(请注意,相同的航班,例如RY-1234-VY,可以在不同的日子进行不同的旅行,但同一天最多可以旅行一次。]

我一直在尝试类似的方法,但是它不起作用,因为它是在每次飞行后返回的,这是运输更多Luggage_Weight的那天,以及完成该任务的飞机。

SELECT Airplane_Code, Day, Flight_Code
FROM Travels
WHERE (Day, Flight_Code) IN (SELECT Day, Flight_Code
                                 FROM boardings b1
                                 GROUP BY Day, Flight_Code
                                 HAVING SUM(Luggage_Weight) = (SELECT MAX(SUM(Luggage_Weight))
                                                              FROM boardings b2
                                                              WHERE b1.Flight_Code = b2.Flight_Code
                                                              GROUP BY Day, Flight_Code
                                                              HAVING SUM(Luggage_Weight) > 100))
GROUP BY Airplane_Code, Day, Flight_Code;
oracle oracle11g subquery max correlated-subquery
1个回答
0
投票

您可以如下使用分析函数ROW_NUMBER

SELECT Flight_Code, Airplane_Code, Day 
  FROM
    (SELECT T.Airplane_Code, T.Day, T.Flight_Code, 
           ROW_NUMBER() OVER (PARTITION BY T.Flight_Code 
                                ORDER BY B.Luggage_Weight DESC) AS RN
      FROM Travels T JOIN boardings B ON B.Flight_Code = T.Flight_Code
     WHERE B.Luggage_Weight >= 100)
 WHERE RN = 1;
© www.soinside.com 2019 - 2024. All rights reserved.