![]() |
Модераторы: Akella |
![]() ![]() ![]() |
|
DestinyStar |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.5.2008 Репутация: нет Всего: нет |
Помогите пожалуйста исправить хранимую процедуры, написать с помощью запросов нельзя, так как задание другое.
Задание: Написать хранимую процедуру для нахождения максимального числа одинаковых записей. Есть таблица заказы, в которой существует запись какой клиент сколько сделал заказов, т.е. есть таблица: cod_zakaza | cod_clienta | data_zakaza 1 1 12.01.10 2 2 13.01.10 3 3 14.01.10 4 4 15.01.10 5 4 16.01.10 6 5 17.01.10 В этой таблице каждый клиент имеет свой номер Нужно написать хранимую процедуру, которая работает со столбиком cod_clienta и ищет там какой клиент сделал больше всего заказов и выдает его номер. Код написан в программе Interbase.
|
|||
|
||||
Gluttton |
|
||||||||||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 7 Всего: 54 |
Запись в терминах БД - это набор полей (он же кортеж). Если cod_zakaza - первичный ключ таблицы, то одинаковых записей в таблице быть не может ![]() ![]() Код процедуры выполенин в императивной парадигме. А SQL - декларативный! Максимум в SQL ищут не перебором в цикле, а путем непосредственного указания (требования) серверу - max(колонка)!
В данном случае необходимо написать именно запрос, а раз уж задание выполнено должно быть в виде хранимой процедуры, то затем полученный запрос "обернуть" телом процедуры ![]() К сожалению нет сейчас установленного SQL-сервера (хотя с InterBase я вообще не работал), но идея в следующем: Выполняем запрос с подсчетом количества заказов с группировкой по клиентам:
Где table - имя таблицы из которой производиться выборка. В результате должны получить следующее:
Затем "заворачиваем" это запрос (в качестве подзапроса) в запрос, который будет выводить код клиента у которого количество заказов равно максимальному:
В результате должны получить:
Данный запрос должен пойти на любом сервере. Его можно упростить наприме применив оконные функции или же применив "бабушкин метод". Если, что не пойдет - пиши, думаю разберёмся ![]() -------------------- Слава Україні! |
||||||||||||
|
|||||||||||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
DestinyStar, неплохо бы указать версию InterBase
Gluttton, ты опять все усложняешь ![]()
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Interbase" | |
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |