SQL: получение полной записи с наибольшим количеством - PullRequest
3 голосов
/ 12 марта 2010

Я пытаюсь написать sql, который дает желаемый результат из данных ниже.

данные:

IDNum  Opt1 Opt2 Opt3 Count
1      A     A    E    1 
1      A     B    J    4
2      A     A    E    9
3      B     A    F    1
3      B     C    K    14
4      A     A    M    3
5      B     D    G    5
6      C     C    E    13
6      C     C    M    1

желаемый результат:

IDNum  Opt1 Opt2 Opt3 Count
1      A     B    J     4
2      A     A    E     9
3      B     C    K     14
4      A     A    M     3
5      B     D    G     5
6      C     C    E     13

По сути, я хочу, чтобы для каждого ID Num была полная запись с наибольшим количеством. Я попытался сделать группировку по, но если я группирую по Opt1, Opt2, Opt3, это не сработает, потому что возвращает наибольшее количество для каждой комбинации (ID Num, Opt2, Opt3, Opt4), что не то, что я хочу. Если я группирую только по ID Num, я могу получить максимум для каждого ID Num, но я теряю информацию о том, какая комбинация (Opt1, Opt2, Opt3) дает этот счет.

Мне кажется, что я делал это раньше, но я не часто работаю с SQL и не могу вспомнить как. Есть ли простой способ сделать это?

Ответы [ 3 ]

1 голос
/ 12 марта 2010

Примерно так:

SELECT * FROM table AS t1
JOIN ( SELECT id, max(count) as Id FROM table GROUP BY id ) AS t2
ON t1.id = t2.id AND t1.id = t2.id

Предполагается, что ни у одного idnum нет одинакового максимального количества, иначе вы получите два idnum

1 голос
/ 12 марта 2010

Редактировать До уточнения вопроса для доступа это работало бы. Я не знаком с доступом, чтобы узнать, будет ли этот запрос поддерживаться.


Я думаю, что это будет работать на SQL Server.

select * from data
inner join (select idnum, max(count) from data
            group by idNum )sub
on sub.IdNum=data.IdNum && sub.Count=data.Count

Конечно, если у вас два идентификатора с одинаковым счетом, он вернет обе строки ...

0 голосов
/ 12 марта 2010

Попробуйте этот запрос:

SELECT * FROM my_table
GROUP BY IDNum
HAVING Count = MAX(Count)

Это должно работать на Access, но я не проверял.

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