|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
Добрый день. Есть запрос, результатом которого является таблица см рисунок. Заголовки столбцов: Дни месяца Рабочие дни, Код предприятия, Кол-во, HOUR1- электропотребление в первый час суток .... HOUR24- электропотребление в последний час суток Необходимо последним столбцом посчитать максимальное потребление из диапазона MAX(HOUR1:HOUR24) 1)за каждые сутки 2) только за рабочие сутки Неужели в Access нет функции расчета максимума из строчного диапазона? Весь день думаю, никак. За любые идеи заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2019, 16:34 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
mikle08es2, А в каком виде (как выглядит таблица) Вы храните данные? Что означает поле "count" (хорошее имя для поля)? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2019, 17:17 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, Данные хранятся в виде таблицы Столбцы которой Дата код предприятия количество получасовых значений электропотребления(Count) h1 -значения электропотребления за первые полчаса суток ..... h48 Собственно запросом получил то, что было в первом сообщение. Теперь нужно найти макс(HOUR1:HOUR24) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2019, 17:57 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
Такая функция: (и смените названия полей:date,count-это зарезервированные слова) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2019, 20:11 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, А можно поподробнее запрос1 -это, я так понял мой запрос который выводит таблицу, а Поле1??? это поле датой? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2019, 21:51 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
mikle08es2, все верно: запрос1-Ваш запрос,поле1-поле с датой приложите фрагмент БД (таблицу и запрос)покажу подробно ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2019, 23:38 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, С радостью бы приложил, просто очень сложная схема данных, которая подтягивает данные с внешних источников. Нужно потратить много времени, чтобы сделать локальную версию. Еще один вопрос: Эта функция применяется выражении прямо в моем запросе( то есть в том запросе который сам получает данные из вне) или же в новом запросе, который обращается к первому запросу? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 00:07 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
mikle08es2, прямо в Вашем запросе: функция в общем модуле, а в запросе вычисляемое поле: my(полеЗапросаСдатой) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 00:31 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, Видимо уже не соображаю. Все так и седлал Вычисляемое поле: my([myDate]) ругается на функцию, слишком мало параметров. требуется 2. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 00:39 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2.
Важно задать такие значения счетчика в цикле FOR чтоб обращение шло к нужным полям ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 00:48 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
Ну правильно ругается-наверное в запросе есть группировка. "Ванговать" я не умею и пока не буду знать как в полях HOUR образуются значения и что является источником запроса ничего конкретного сказать не могу ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 01:53 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdkuТакая функция: (и смените названия полей:date,count-это зарезервированные слова) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
-А функция то какой тип возвращает ? my = q - там вообще то все переменные в том числе и та что в цикле крутится As Recordset ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 02:02 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
mikle08es2, mikle08es2... Необходимо последним столбцом посчитать максимальное потребление из диапазона MAX(HOUR1:HOUR24) 1)за каждые сутки 2) только за рабочие сутки Неужели в Access нет функции расчета максимума из строчного диапазона? ... Прежде всего, то, что вы хотите, в access делается перекрестным запросом. Там есть желаемый вами "максимум по строке". для того, чтобы его составить, нужна другая структура таблицы с исходными данными. И, прежде чем читать этот пост дальше, разберитесь с тем, как это правильно делать в Access с использованием перекрестного запроса. --------------------------------------------------------- --------------------------------------------------------- --------------------------------------------------------- Предположим, у вас есть разумные основания, для того, чтобы сознательно делать это "неправильно", на основе вашей наличной структуры данных. Этого нельзя сделать так, как вы хотите. Потому что в строке таблицы нет диапазонов. К полям в запросе нельзя обратиться как целому массиву, или к "диапазону его полей" непосредственно из самого запроса. (с оговоркой на исключение из рассмотрения предложенного вам ранее специального варианта с рекурсивным открытием рекордсета в функции) Но можно написать функцию, принимающую произвольное число параметров, и выбирающую из них "максимум". Если такую функцию назвать Greatest, то обратиться к ней с первыми 10 полями hour из запроса можно будет так: Код: vbnet 1.
Для 24 полей их придется явно все перечислить. Сокращенной записи сорта [hour1:hour24] для полей запроса нет. Будем считать, что вы осознанно хотите явно перечислить все 24 поля. Разберемся с реализацией. И начнем с того, как мог бы выглядеть обычный максимум, выбирающий из двух значений. Например, вот так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Такой максимум не годится для непосредственного использования в запросе. У правильного максимума, имеющего целью сравнение двух значений в одной строке запроса может быть два варианта разумного поведения: а) если любой из его параметров равен Null, то он возвращает Null. Т.е. он "больше" любого числового значения. И это традиционный вариант интерпретации Null в строке. (максимум с произвольным числом параметров с таким поведением будем называть просто Greatest) б) если один из параметров Null, а другой нет, то возвращается числовое значение, Null игнорируется. В этом варианте Null "меньше" любого числового значения. На практике мне не известно использование в стандартных реализациях строчных максимумов такого варианта поведения. Но, так как структура ваших данных нетрадиционна, то именно такой строчный "максимум" вы и ищете. В этом варианте Null меньше любого числового значения. (Такой максимум с произвольным числом параметров назовем Greatest_IgnoreNull) Начнем с обычного, "стандартного" Greatest Понятно, что max_vn для стандартного greatest, используемого в запросе не годится. Исправим его поведение и назовем max_vn_nonnull Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Тогда стандартный Greatest может выглядеть так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Теперь про нестандартный. Исходный max_vn годится для нестандартного, когда первый параметр числовой, и не годится, когда первый параметр Null. В случае, когда достоверно известно, что именно первый параметр Null, можно поменять параметры местами в обращении к max_vn Поэтому дописываем к max_vn такую обвязку: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Теперь нестандартный вариант становится таким: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Эта функция вернет Null, только если все переданные ей фактические параметры имеют значение Null. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 06:06 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
booby, boobyПрежде всего, то, что вы хотите, в access делается перекрестным запросом. Там есть желаемый вами "максимум по строке". для того, чтобы его составить, нужна другая структура таблицы с исходными данными. И, прежде чем читать этот пост дальше, разберитесь с тем, как это правильно делать в Access с использованием перекрестного запроса. Подскажите тогда, в какой таблице необходимо хранить такого рода данные? Есть Даты, код потребителя, количество получасовых значений электропотребления, и 48 значений электропотребления за каждые полчаса суток. Насколько мне известно перекрестным запросом можно в строке групповых операций задать только один раз значение., а у меня их 48. Я думаю поэтому перекрестный запрос и не подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 12:31 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, Делал, делал Вам пример, чтобы помогли разобраться. Около часа делал. Сделал. и бац все работает в примере. Спасибо!!! А в общей базе нет.)))) Единственное, что приходит в голову, в общей базе для выборки по датам ссылаюсь на форму с ячейками, в которых вколочены даты. Ковыряю дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 12:37 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, Странно. Максимум ищет но не во всех строках верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 13:22 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, Совершенно не ясно почему не правильно берет максимум в некоторых строках.... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 16:56 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
mikle08es2, в строках где нет расхода должен быть 0 (значение по умолчанию) до цикла FOR инициировать переменную q=0 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 20:14 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, А как это должно помочь? Не понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2019, 21:30 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
mikle08es2, как вариант (см.форму "vybor") ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 02:23 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, Спасибо за помощь, но это не совсем, что нужно. У меня получилось верно искать максимум если во всех ячейках пустых проставить нули. Единственное, я так и не понял почему не получается сделать это при наличии пустых полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 08:28 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
sdku, Спасибо за помощь, но это не совсем, что нужно. У меня получилось верно искать максимум если во всех ячейках пустых проставить нули. Единственное, я так и не понял почему не получается сделать это при наличии пустых полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 09:34 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
mikle08es2почему не получается сделать это при наличии пустых полей.Под "пустыми полями" разумеется поле со значением NULL? Если так - то следует помнить, что проверка на это значение должны выполняться особым образом. Если с точки зрения хранения данных NULL - это "значение отсутствует", то с точки зрения обработки данных NULL - это "значение неизвестно". Или, для простоты понимания - "фиг знает". И по этой причине любое действие с NULL даёт NULL - и сравнение (равны ли единица и "фиг знает"? а фиг знает...), и, скажем, сложение (чему равно единица плюс "фиг знает"? а фиг знает...). NULL в качестве результата сравнения интерпретируется как False - потому что всё, что не гарантирует True, есть False. И если в длинной цепи проверок затесался хотя бы один NULL - он, как вирус, расползётся по всему выражению. И окончательным итогом окажется NULL. Который, как сказано выше, False. А потому, если значение поля может быть NULL, необходимо либо добавлять соответствующую проверку (WHERE поле = что-то OR поле IS NULL), либо конвертировать NULL в конкретное определённое значение (WHERE IFNULL(поле, что-то_особенное) = что-то). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 09:57 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
mikle08es2...Единственное, я так и не понял почему не получается сделать это при наличии пустых полей.потому что NULL<>0 (не больше и не меньше-просто ничто.Ведь в Ёкселе,при автосуммировании значение NULL преобразуется в 0 только происходит это молча-по умолчанию) и существует ряд способов не отображать 0 в поле формы,сохраняя это значение в поле таблицы (функции NZ,IIF) В предложенном варианте хранения данных создание запросов(подобных открывшему топик) не вызовет затруднений Сам запрос:(Функцию определения максимального расхода сочините сами по аналогии с процедурой) Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 12:54 |
|
Максимум из значений в строке(диапазона значений в строке)
|
|||
---|---|---|---|
#18+
boobyПрежде всего, то, что вы хотите, в access делается перекрестным запросом. Там есть желаемый вами "максимум по строке". Интересно:и хде же он? Ведь в перекрестном запросе "значение" это результат групповой операции (например SUM) и MAX по этому полю в заголовке строк даст наибольшее слагаемое из которых состоят "значения" отображаемые в строке, а MAX(SUM(..)) применить не удастся ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 13:43 |
|
|
start [/forum/topic.php?fid=45&fpage=36&tid=1610853]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 131ms |
0 / 0 |