Выберите отдельные строки по первому столбцу и максимуму второго - PullRequest
0 голосов
/ 20 марта 2019

У меня есть следующая таблица:

Item           Prod        Company
1.00961.501    PR011798    ditto
1.00961.501    PR012042    ditto
1.00961.501    PR013442    Pika
1.00961.502    PR012043    ditto
1.00961.503    PR011959    ditto
1.00961.503    PR011669    Bulb
1.00961.507    PR014783    ditto
1.00961.507    PR012050    ditto

Я хотел бы выбрать все таблицы, сгруппированные по Item, взяв только максимум Prod. Как то так:

Item           Prod        Company
1.00961.501    PR012042    ditto
1.00961.502    PR012043    ditto
1.00961.503    PR011959    ditto
1.00961.507    PR014783    ditto

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

SELECT  DISTINCT Item, MAX(Prod)
FROM    DataBase
WHERE   Company = 'ditto'

но это дает мне

Column 'Item' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Если я удаляю предложение MAX, оно не возвращает ошибок, но Item повторяется для каждого Prod.

Есть идеи?

EDIT

Я забыл добавить к вопросу предложение Where. Когда я это делаю и пытаюсь использовать Group By вместо Distinct, я получаю следующую ошибку:

Column 'Company' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Ваш запрос должен быть таким:

SELECT  Item, MAX(Prod),Company
FROM    DataBase
WHERE   Company = 'ditto'
GROUP BY Item,Company;
0 голосов
/ 20 марта 2019

Вам нужно разделить продукт, а затем выбрать один из этого раздела.Попробуйте этот запрос ниже.

select Item, Prod, Company from 
  (
    select *,
    (ROW_NUMBER() over (partition by Item order by Prod DESC)) as Row from [table_name] 
    where Company = 'ditto'
  ) t where Row = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...