2015-05-12 2 views
0

Допустим, у меня есть данные, как это:SQL Group на один столбец и решить, какие колонки выбрать

| id  | code  | name | number | 
----------------------------------------------- 
| 1  |  20  | A  | 10 | 
| 2  |  20  | B  | 20 | 
| 3  |  10  | C  | 30 | 
| 4  |  10  | D  | 80 | 

Я хотел бы группу строк по code стоимости, но получить реальные строки обратно (не какой-то агрегатной функции) ,

Я знаю, что только

select * 
from table 
group by code 

не будет работать, потому что база данных не знаю, какая строка возвращать где код такой же.

Так что мой вопрос заключается в том, чтобы сказать, базу данных, чтобы выбрать (например) нижний столбец с номером, так и в моем случае

| id  | code  | name | number | 
----------------------------------------------- 
| 1  |  20  | A  | 10 | 
| 3  |  10  | C  | 30 | 

P.S.

Я знаю, как это сделать с помощью PARTITION, но это разрешено только в базах данных Oracle и не может быть создано в построителе критериев JPA (какова моя конечная цель).

+0

@damien_the_unbeliever: Я не думаю, что это дубликат, потому что Марко должен сделать это в запутывания слое, а не в SQL. –

+0

@damien_the_unbeliever Я думаю, это не дубликат. Вторая причина заключается в том, что в другом примере критерии относятся к столбцу id (первый id), в моем случае критерии относятся к столбцу номера. Я знаю, что это швы, как не много изменений, но если я хочу использовать решение join (select ...), мне нужно во втором выбрать, чтобы получить id без функции агрегации (в другом случае был min). –

ответ

0

Почему вы не используете такой код?

SELECT 
     id, 
     code, 
     name, 
     number 
FROM 
(
    SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY code ORDER BY number ASC) AS RowNo 
     FROM table 
) s 
WHERE s.RowNo = 1 
+0

Посмотрите на мои p.s. Я знаю решение с разделом, но это мне не помогает –

Смежные вопросы