powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос для выборки 3 максимальных значений в подгруппе
15 сообщений из 15, страница 1 из 1
Запрос для выборки 3 максимальных значений в подгруппе
    #39662373
Добрый день!
Уважаемые участники форума, подскажите пожалуйста с решением проблемы. В Эксель есть таблица на листе1 , содержащая в себе колонки:
ID, summa, ostatok

Я подключил библиотеку SQL, и мне нужно написать запрос для вывода записей с 3 максимальными значениями summa в каждой группе ID.

То есть имеется таблица:
ID / summa / ostatok

1 / 100 / 100
1 / 80 / 50
1 / 90 / 60
1 / 60 / 100
2 / 50 / 50
2 / 100 / 50

Рузультат должен быть:

ID / summa / ostatok

1 / 100 /100
1 / 90 /60
1 / 80 /50
2 / 100 /50
2 / 50 /50
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662418
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эффект Доплера,

select id, max(summa)
from tbl
group by id
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662424
Этот запрос выведет на против каждого ID его максимальное значение, а как вывести дополнительно следующее за ним максимальное?
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662430
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эффект Доплера,

упорядочить что ли? Вы говорили пр омаксимально в группе, показали что то другое.
Может так?

Код: sql
1.
2.
3.
select id, summa
from tbl
order by id, summa desc
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662435
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин, это тоже не подойдет. Надо ж 3 штуки, а не просто упорядочить. Теперь я соединил воедино картинку ;)
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662439
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эффект Доплера, у меня в голове запросом не выходит - только открыть рекордсет(предварительно упорядочив записи
Код: sql
1.
ORDER BY id, summa DESC

) и там уже выбирать 3 первые в разрезе каждого ID.
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662493
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая вещь, как TOP. Почитайте о нём. Пример
Код: sql
1.
SELECT TOP 3 * FROM User where UserName='myuser' AND Application='myapp'

Первые 3 записи из запроса
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662499
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, TOP должно применяться совместно с ORDER BY
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662515
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эффект Доплеранужно написать запрос для вывода записей с 3 максимальными значениями summa в каждой группе ID
Код: sql
1.
2.
3.
4.
5.
SELECT ID, First(summa), First(ostatok)
FROM таблица AS T1
WHERE summa IN 
(SELECT TOP 3 summa FROM таблица WHERE ID=T1.ID ORDER BY summa)
GROUP BY ID
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662526
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ещё такая штука, как WITH TIES но она вроде только для SQL Server



Возможности параметра WITH TIES в версии SQL Server

Когда во время учебных занятий по T-SQL мы обсуждаем фильтр TOP и упоминается параметр WITH TIES, я часто вижу удивленные лица слушателей. Очевидно, многим неизвестно о существовании этого параметра и его назначении, хотя он появился в фильтре TOP в версии SQL Server 7.0.

Рассмотрим следующий запрос:
Код: sql
1.
2.
3.
SELECT TOP (3) orderid, orderdate, empid, custid
FROM dbo.Orders
ORDER BY orderdate DESC;


Этот запрос возвращает три последних заказа. Но поскольку столбец orderdate не уникален, нельзя определить предпочтения между строками с одинаковой датой. Из-за этого запрос становится недетерминированным. Порядок доступа к строкам с одинаковой датой определяется порядком физического доступа. Благодаря параметру WITH TIES выполнение запроса не останавливается немедленно после того, как возвращено заданное число строк, а выдаются все связи с последней строкой с учетом элементов упорядочения (в данном случае orderdate). Это означает, что вы можете получить больше строк, чем было запрошено, но отбор строк становится детерминированным.
Применить этот параметр с нашим запросом можно следующим образом:
Код: sql
1.
2.
3.
SELECT TOP (3) WITH TIES orderid, orderdate, empid, custid
FROM dbo.Orders
ORDER BY orderdate DESC;

...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662528
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichelleЭффект Доплеранужно написать запрос для вывода записей с 3 максимальными значениями summa в каждой группе ID
Код: sql
1.
2.
3.
4.
5.
6.
SELECT ID, First(summa), First(ostatok)
FROM таблица AS T1
WHERE summa IN 
(SELECT TOP 3 summa FROM таблица WHERE ID=T1.ID ORDER BY summa DESC)
GROUP BY ID
ORDER BY ID, summa


Уточнение: в подзапросе сортировка по убыванию.
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662538
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle__Michelleпропущено...

Код: sql
1.
2.
3.
4.
5.
6.
SELECT ID, First(summa), First(ostatok)
FROM таблица AS T1
WHERE summa IN 
(SELECT TOP 3 summa FROM таблица WHERE ID=T1.ID ORDER BY summa DESC)
GROUP BY ID
ORDER BY ID, summa


Уточнение: в подзапросе сортировка по убыванию.

Код: sql
1.
2.
3.
4.
5.
SELECT T1.id, T1.summa
FROM tblDemo AS T1
WHERE T1.summa IN 
(SELECT TOP 3 T2.summa FROM tblDemo T2 WHERE T2.ID=T1.ID ORDER BY T2.summa DESC)
ORDER BY ID, summa DESC



Так ближе, наверное
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662553
У вас таблица в Экселе, а где будет выполняться запрос? Здесь же или в Аксе (к прилинкованной таблице)? И для чего нужен результат?
В Экселе можно его средствами (написать процедуру) скопировать нужные строки на другой лист (или в другой файл), а затем, при необходимости, выполнить запрос к этим данным.

Эффект ДоплераЯ подключил библиотеку SQL Имеется ввиду ADO, или DAO, или что?
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39662980
Кривцов Анатолий, запрос будет выполняться в Экселе, подключил ADO. Мне кажется SQL к данной задаче лучше подходит, чем писать процедуру на VBA, но может я и ошибаюсь...
...
Рейтинг: 0 / 0
Запрос для выборки 3 максимальных значений в подгруппе
    #39663036
Озверин, спасибо, последний вариант подошел!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос для выборки 3 максимальных значений в подгруппе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]