1 отдельная строка, имеющая максимальное значение - PullRequest
0 голосов
/ 19 апреля 2019

Это данные, которые у меня есть

enter image description here

Мне нужен уникальный идентификатор (1 строка) с максимальным значением (цена). Таким образом, результат будет:

enter image description here

Я пробовал следующее

select * from table a
join (select b.id,max(b.price) from table b
group by b.id) c on c.id=a.id;

дает Вопрос в качестве вывода, потому что нет ключа. Я также попробовал другое условие where, которое выдает исходную таблицу в качестве вывода.

1 Ответ

1 голос
/ 19 апреля 2019

Вы можете попробовать что-то вроде этого в SQL Server:

Таблица

create table ex1 (
    id int, 
    item char(1),
    price int,
    qty int,
    usr char(2)
);

Данные

insert into ex1 values
(1, 'a', 7, 1, 'ab'),
(1, 'a', 7, 2, 'ac'),
(2, 'b', 6, 1, 'ab'),
(2, 'b', 6, 1, 'av'),
(2, 'b', 5, 1, 'ab'),
(3, 'c', 5, 2, 'ab'),
(4, 'd', 4, 2, 'ac'),
(4, 'd', 3, 1, 'av');

Запрос

select a.* from ex1 a
join (
    select id, max(price) as maxprice, min(usr) as minuser
    from ex1
    group by id
) c
    on c.id = a.id
    and a.price = c.maxprice
    and a.usr = c.minuser
order by a.id, a.usr;

Результат

id  item price qty  usr
1   a     7    1    ab
2   b     6    1    ab
3   c     5    2    ab
4   d     4    2    ac

Пояснение

В вашем наборе данных ID 1 имеет 2 записи с одинаковой ценой. Вы должны принять решение, какой вы хотите. Итак, в приведенном выше примере я показываю одну запись для пользователя, чье имя в алфавитном порядке наименьшее.

Альтернативный метод

SQL Server имеет функцию ранжирования row_number over(), которая также может использоваться:

select * from (
    select row_number() over( partition by id order by id, price desc, usr) as sr, *
    from ex1
) c where sr = 1;

В подзапросе говорится - дайте мне все записи из таблицы и дайте каждой строке серийный номер, начиная с 1 уникального для каждого идентификатора. Сначала нужно отсортировать строки по идентификатору, затем по убыванию цены и затем по usr. Внешний запрос выбирает записи с номером sr 1.

Пример здесь: https://rextester.com/KZCZ25396

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...