powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос на максимум
14 сообщений из 14, страница 1 из 1
Запрос на максимум
    #36606304
nionka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста, дали задание по Visual FoxPro, я смогла сделать меню и форму, а запросы не получаются. Подскажите, хотя бы один: выделить дни недели за указанный период (это по фильтру сделала), отличающиеся максимальным числом читателей, обслуженных конкретной кафедрой.
Таблица "Статистика" (в библиотеке 3 отдела - аб,чз,кх, в каждом по две кафедры -1,2, в каждом отделе по 10 сотрудников, какие-либо 2 имеют выходной каждый день в течении 6 рабочих дней, т.е. фактически работают 8 сотрудников):
Таб.№ сотруд. Дата День недели Отдел Кафедра Кол-во читателей
101 15.09.09 вторник аб 1 25
102 15.09.09 вторник аб 1 13
.......
106 ---- ------ чз 2 18
и так вся неделя заполнена.
Я поняла задание так: нужно посчитать кол-во читателей каждой кафедры за день и вывести день, когда их было max
17.09.09 четверг аб 1 77
19.09.09 суббота аб 2 100
15.09.09 вторник чз 1 107
17.09.09 четверг чз 2 66
20.09.09 воскресенье кх 1 55
19.09.09 суббота кх 2 88
Наверно, кому-то мой запрос покажется ерундой, но нам поставили этот предмет на сессию и просто дали задание, а для меня Фокспро - темный лес. Я же не программист... Буду рада любой помощи, проект приложила
...
Рейтинг: 0 / 0
Запрос на максимум
    #36608016
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SELECT dennedeli,MAX(kolchit) FROM statistika WHERE kafedra= 2  AND chislo between {^ 2009 - 09 - 09 } and {^ 2009 - 09 - 20 } GROUP BY dennedeli ORDER BY  2 
...
Рейтинг: 0 / 0
Запрос на максимум
    #36608236
nionka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот получила:
SELECT Statistika.dennedeli, Statistika.otdel, Statistika.kafedra,;
MAX(Statistika.kolchit);
FROM ;
Statistika;
WHERE ( Statistika.chislo BETWEEN CTOD("09/15/09") AND CTOD("09/20/09");
AND Statistika.kafedra = ( 1 ) );
OR Statistika.kafedra = ( 2 );
GROUP BY Statistika.dennedeli, Statistika.otdel, Statistika.kafedra;
ORDER BY 4

а как мне сделать так, чтобы сначала суммировать кол-во читателей за день, обслуженных например 1 кафедрой абонемента, а потом вывести день, в который читателей было max
...
Рейтинг: 0 / 0
Запрос на максимум
    #36608242
nionka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот получила:
SELECT Statistika.dennedeli, Statistika.otdel, Statistika.kafedra,;
MAX(Statistika.kolchit);
FROM ;
Statistika;
WHERE ( Statistika.chislo BETWEEN CTOD("09/15/09") AND CTOD("09/20/09");
AND Statistika.kafedra = ( 1 ) );
OR Statistika.kafedra = ( 2 );
GROUP BY Statistika.dennedeli, Statistika.otdel, Statistika.kafedra;
ORDER BY 4

а как мне сделать так, чтобы сначала суммировать кол-во читателей за день, обслуженных например 1 кафедрой абонемента, а потом вывести день, в который читателей было max
...
Рейтинг: 0 / 0
Запрос на максимум
    #36608288
nionka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну, если уж на форуме никто не может подсказать решение моего запроса, значит запросы настолько сложные, я-то и тем более не смогу выполнить задание
...
Рейтинг: 0 / 0
Запрос на максимум
    #36608309
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nionkaну, если уж на форуме никто не может подсказать решение моего запроса, значит запросы настолько сложные, я-то и тем более не смогу выполнить заданиеа что, вариант, предложенный zchvv , не работает? Тогда подробнее опишите, какой результат Вам необходим. Имхо его запрос должен выдавать то, что Вам надо.

О. прочитал предыдущий пост
а как мне сделать так, чтобы сначала суммировать кол-во читателей за день, обслуженных например 1 кафедрой абонемента, а потом вывести день, в который читателей было max
Код: plaintext
1.
2.
3.
4.
select statistika.dennedeli from statistika where chislo=
(select top  1  chislo from
 (select sum(statistika.kolchit) kc,chislo where kafedra=NOMER_KAFEDRY and chislo between ?dbeg and ?dend group by chislo) t0
 order by kc desc)
PS. Извините, но после пива покрасивше запрос не придумывается
...
Рейтинг: 0 / 0
Запрос на максимум
    #36609203
nionka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

ничего не получается (((
Вот вроде просто найти из шести SUM(Statistika.kolchit) найти MAX , а никак не выводится (((
...
Рейтинг: 0 / 0
Запрос на максимум
    #36609212
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nionka,

чего не получается-то? внутренний запрос (тот, что t0) выводит суммы или нет? запрос на строках 2-5 выводит нужный максимум или нет?
...
Рейтинг: 0 / 0
Запрос на максимум
    #36609222
nionka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirnionka,

чего не получается-то? внутренний запрос (тот, что t0) выводит суммы или нет? запрос на строках 2-5 выводит нужный максимум или нет?
Пишет missing operand
...
Рейтинг: 0 / 0
Запрос на максимум
    #36609230
zchvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,
может быть, пропущено AS?

Код: plaintext
1.
2.
3.
select statistika.dennedeli from statistika where chislo=
(select top  1  chislo from
 (select sum(statistika.kolchit) AS kc,chislo where kafedra=NOMER_KAFEDRY and chislo between ?dbeg and ?dend group by chislo) t0
 order by kc desc)
...
Рейтинг: 0 / 0
Запрос на максимум
    #36609724
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия FoxPro какая? Все эти "навороты" с подзапросами будут работать только в VFP9. Да и то, не факт. Надо проверять на тестовых данных.

И еще. В форуме помогают по желанию. Добровольно. Никто никому ничего не обязан. Если на Ваш вопрос не ответили, это не значит, что на Ваш вопрос нет ответа. Возможно, просто нет желания отвечать.

Также напомню, что FoxPro - не есть монополист на стандарт Select-SQL. Более того, синтаксис запросов Select-SQL в своей основе одинаковый вообще для всех языков программирования. Разумеется, есть нюансы (диалекты), но в своей основе он одинаковый. Так он был задуман. Посмотрите в других форумах по другим базам данных как вообще составляются подобные SQL-запросы.
...
Рейтинг: 0 / 0
Запрос на максимум
    #36609771
nionka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ, версия 9. Я смотрю не только на этом форуме, но когда совсем не знаешь программу, очень трудно понять в чем ошибка. Казалось бы просто в MAX(SUM(kolchit)), но никак. Но все равно спасибо, что откликнулись, буду пытаться что-то еще придумать
...
Рейтинг: 0 / 0
Запрос на максимум
    #36609784
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nionkaКазалось бы просто в MAX(SUM(kolchit)), но никак.
Потому что это бессмысленная конструкция. Нужно искать MAX() от результата работы другого запроса. Т.е. использовать подзапрос. Схематично примерно так

Код: plaintext
1.
2.
select MAX(tmp.kol)
from (select chislo, sum(kolchit) as kol from Statistika group by chislo) as tmp

Другой вариант решения основан на том факте, что если упорядочить результат выборки, то, естественно, первая (или последняя) запись выборки и будет максимумом. Т.е. используется такая схема

Код: plaintext
1.
2.
3.
4.
5.
6.
select 
	chislo, 
	sum(kolchit) as kol 
from Statistika 
group by chislo
order by  2  desc

Группировка по полю chislo, но сортировка по результату расчета, причем в порядке убывания. Т.е. в результирующей выборке максимальное количество будет у первой записи
...
Рейтинг: 0 / 0
Запрос на максимум
    #36610001
nionka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
select MAX(tmp.kol)
from (select chislo, sum(kolchit) as kol from Statistika group by chislo) as tmp

Другой вариант решения основан на том факте, что если упорядочить результат выборки, то, естественно, первая (или последняя) запись выборки и будет максимумом. Т.е. используется такая схема

Код: plaintext
1.
2.
3.
4.
5.
6.
select 
	chislo, 
	sum(kolchit) as kol 
from Statistika 
group by chislo
order by  2  desc

Группировка по полю chislo, но сортировка по результату расчета, причем в порядке убывания. Т.е. в результирующей выборке максимальное количество будет у первой записи[/quot]

Спасибо! 2 вариант подходит, но проблема в том, что у меня несколько максимумов, а выводится первый только, н-р:
абонемент 166 читателей,
а читальный зал 200 и книгохранилище 180 - уже не выводится
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос на максимум
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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