2014-11-05 4 views
1

К сожалению, ребята, я с ума получаешь это ...ВЫБРАТЬ TOP из каждой группы

Мой стол:

ID Name  Surname  Capital  Capital_Group Job  Job_Group 
---------- -------- ----------- ------------- ------ -------------- 
1 Michael Jackson  LessThan50        Entertainer 
1 Michael Jackson     Medium     Entertainer 
2 John  Lennon      Small     Swimmer 
3 Clara  Clinton     Huge   Runner 
3 Clara  Clinton     Huge     Sportsmen 

Я просто хочу, чтобы получить верхнюю строку из каждого идентификатора , но не на основе ничего, кроме того, что это происходит выше остальных (он уже отсортирован). Любая помощь оправдана, мое здравомыслие поставлено на карту.

+3

Что это такое? –

+0

и вы пробовали что? – SMA

+0

Итак, в запросе необходимо указать критерии сортировки? Таблица является примером, она сортируется на основе разных критериев. Нет ли возможности получить самую высокую строку? – Zenon

ответ

2

Предположив, что ваша таблица сортируется по Capital в порядке для каждого id нисходящие и что id определяет группу, нижеследующее может делать то, что вы хотите:

select t.* 
from mytable as t 
where not exists (select 1 
        from mytable as t2 
        where t2.id = t.id and t2.capital > t.capital 
       ); 
+0

Я получаю 'недействительный аргумент для работы с этим запросом: SELECT t. * FROM qry_DD_Doubling как t WHERE NOT EXISTS (SELECT 1 FROM qry_DD_Doubling AS t2 WHERE t2.AC_ID = t.AC_ID). Есть предположения? – Zenon

+0

@ Zenon. , , В этом запросе нет никакой функции, поэтому сообщение об ошибке очень запутанно. –

0
with cte 
(
select *, row_Number() over(Partition by ID order by Name) as RowNumber 
) 

select * from cte 
where RowNumber=1 

попробовать это, дайте мне знать, ур комментарии на этом.

+2

Доступ SQL не поддерживает CTE или 'OVER (PARTITION BY ...)'. (Access не использует T-SQL.) –

1
SELECT t.* 
FROM mytable AS t 
WHERE t.capital = (SELECT MAX(capital) 
        FROM mytable t2 
        WHERE t2.id = t.id) 

Кстати, что вы хотите делать, когда есть два человека с одинаковым идентификатором и капиталом?

0
select distinct ID ,Name ,Surname,Capital from mytable order by ID 
+0

Основываясь на таблице OP, это не сработает, потому что есть два разных идентификатора ID = 1, основанные на ID, имени, фамилии и капитале. –

0
SELECT * 
FROM yourTable 
GROUP BY id 
HAVING MAX(Capital) 
0

выберите *, row_number() над (упорядочить по ID), как в РНО # temp1

выберите * от #temp при t-, где РНО не в (выбрать макс (RNO) от # temp as tt group by ID)

Я думаю, это поможет вам

+0

Это не работает в Access. В Access не используется T-SQL. –