выберите максимальную «стоимость аренды» для каждого (автомобиль, модель) - PullRequest
0 голосов
/ 26 апреля 2018

Я иду за двумя столами;

Таблица A:

+--------+-----------+-------------+
| rentID | carNumber | rentalPrice |
+--------+-----------+-------------+
| Q16    | 2255DFS   |        1150 |
| Q14    | 1104RDC   |         250 |
| Q02    | 1475MHG   |         447 |
| Q11    | 8552FCG   |         214 |
+--------+-----------+-------------+

Таблица B:

+---------+------------+--------+
| number  |   brand    | model  |
+---------+------------+--------+
| 2255FDS | AUDI       | A3     |
| 1104RDC | AUDI       | A4     |
| 1475MHG | VOLKSWAGEN | PASSAT |
| 8552FCG | VOLKSWAGEN | POLO   |
+---------+------------+--------+

Мне нужно получить максимальную цену аренды для каждой марки и модели автомобиля, RentID, марки и модели автомобиля.

С данными таблицами я хочу получить вывод:

  1. Q16 AUDI A3 1150
  2. Q02 VOLKSWAGEN PASSAT 447

Пока я получил это:

SELECT c.brand, c.model,
       MAX(r.rentalPrince) AS maxRentalPrice

FROM ( RENTAL_DETAILS R
  INNER JOIN CAR C ON c.number = r.carNumber )

GROUP BY c.brand, c.model;

Но если я попытаюсь выбрать rentID, я просто получу все арендные ставки, которые есть в таблице.

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Не могли бы вы использовать подзапрос, чтобы сначала найти максимальную арендную цену, а затем использовать результат этого для создания запроса по интересующим столбцам?

select r.rentalPrice, c.brand, c.model, r.rentID
from cars c 
join rentals r on c.carNumber = r.number
where r.rentalPrice in (
  select max(r.rentalPrice) 
  from rentals r
  join cars c on r.number = c.carNumber 
  group by c.brand, c.model);

Если у вас> 1 прокат по той же максимальной цене, это может дать неверный результат.

0 голосов
/ 26 апреля 2018
SELECT 
    * 
FROM 
(SELECT 
    Brand 
    ,carNumber 
    ,rentalprice
    ,RANK() OVER (PARTITION BY brand ORDER BY rentalprice DESC) AS highest 
FROM 
    dbo.Table_A
JOIN dbo.Table_B ON Number=carNumber) filterdtable
WHERE filterdtable.highest = 1

Использовал производную таблицу для фильтрации результатов. Надеюсь это поможет!

0 голосов
/ 26 апреля 2018

Вы можете использовать аналитические функции:

SELECT rc.*
FROM (SELECT c.brand, c.model, r.*,
             MAX(r.rentalPrice) OVER (PARTITION BY c.brand, c.model) as max_rp
      FROM RENTAL_DETAILS r INNER JOIN
           CAR c
           ON c.number = r.carNumber
     ) rc
WHERE rentalPrice = max_rp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...