|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.07.2010, 23:19 | #1 |
Заблокирован
Регистрация: 28.05.2010
Сообщений: 65
|
Рассчет порядкового номера запроса
Задача такова:
На сервер поступают запросы с разных ПК. Номер запроса зависит от известного номера предыдущего зарегистрированного и внесенного в таблицу запроса, известной даты и времени поступления предыдущего запроса, известной даты и времени поступления текущего запроса, который необходимо пронумеровать по порядковому номеру, и от количества запросов за некоторый известный промежуток времени, которое может изменятся в известном диапазоне. Необходимо пронумеровать запросы в порядке возрастания, но повторятся порядковые номера запросов не должны, так как это не возможно логически (Сервер не может обработать два запроса как один.). Если наименьшая единица времени поступления предыдущего запроса совпадает с наименьшей единицей времени поступления текущего запроса - тогда большим должен быть номер текущего запроса, так как в таблице он указан на нижней строчке, и соответственно зарегистрирован позже предыдущего. Помогите решить это головоломку кто нибудь. В примере ниже первый номер запроса известен. Даты известны. Далее порядковые номера запросов - неизвестны и подлежат расчету. 1440 - это количество минут в сутках, это значение не играет роли, а введено для корректной обработки даты как число - в минутах. Количество поступающих, незарегистрированных запросов в минуту колеблется в пределах от 18 до 29. В ячейках B2; B3 минута поступления предыдущего и текущего запроса одинакова. Следовательно виден баг в формуле (результаты вычислений в ячейках А2; А3) У меня вообще мозг кипит, но я чувствую, что решение где-то очень и очень близко... Все гениальное - просто, но блин ступор тут и все. Подтолкнёте кто нить к истине?.. Последний раз редактировалось %$PROregRAMi$t%; 17.07.2010 в 23:40. |
18.07.2010, 12:37 | #2 |
Пользователь
Регистрация: 09.12.2008
Сообщений: 56
|
Попробуйте считать количество повторов.
Ведь у Вас при одинаковых значениях B3-B2 дает 0, и потом все умножается на этот нолик Например так =A2+(B3-B2+СЧЁТЕСЛИ($B$2:B3;B3)-1)*1440*СЛУЧМЕЖДУ(18;29)
обычно я на http://planetaexcel.ru/forum.php
|
18.07.2010, 14:24 | #3 |
Заблокирован
Регистрация: 28.05.2010
Сообщений: 65
|
В принципе так и есть все умножается на ноль в этом случае.
Igor67, к сожалению Ваша формула дает слишком большое значение в ячейке А3. Вы можете объяснить зачем нужно фиксировать ячейку B2 ? Если эту формулу растянуть дальше - получается какая-то порнография. Результаты вообще некорректны, формат вычислений изначально ДАТА, и числа после преобразования формата в числовой без десятичных знаков получаются слишком большие... Но проблема собственно в другом, а именно - СЛУЧМЕЖДУ(18;29) может давать одинаковые числа или числа которые при расчете двух результатов в разных ячейках выдают одинаковые значения, что недопустимо. Этот аспект можно как-то ограничить??? Кстати по этому поводу я создавал несколько тем на этом форуме. Уже не один месяц бьюсь над решением этой головоломки. Последний раз редактировалось %$PROregRAMi$t%; 18.07.2010 в 15:41. |
18.07.2010, 14:37 | #4 |
Заблокирован
Регистрация: 28.05.2010
Сообщений: 65
|
=ЕСЛИ(B3=B2;A2+СЛУЧМЕЖДУ(1;17);A2+( B3-B2)*1440*СЛУЧМЕЖДУ(18;29))
Но это опять-же формула только исключающая равенство ДВУХ значений даты и времени регистрации предыдущего и текущего запроса. А если совпадают значения дат и времени регистрации трех-четырех, десяти запросов??? (разумеется количество повторов не превышает среднее количество, указанное как число максимальное в функции СЛУЧМЕЖДУ(1;17).) Следовательно есть еще один не менее важный вопрос для решения этой задачи: Как ограничить повтор результата работы функции СЛУЧМЕЖДУ, если она в формуле? В предыдущей, созданной мною теме дан ответ, но сугубо СЛУЧМЕЖДУ. И еще одна фигня: Если к примеру количество запросов находится в другом, более широком диапазоне, например от 18 до 37 запросов в минуту? тогда результат работы функции СЛУЧМЕЖДУ(18;37) может выдавать как число 18, так и 36... Что в двух смежных ячейках может привести к одинаковым значениям результата, что недопустимо. Это при условии, что время регистрации запроса текущего и предыдущего отличается на +1 минуту... Как это все упаковать в одну формулу? Последний раз редактировалось %$PROregRAMi$t%; 18.07.2010 в 15:50. |
18.07.2010, 18:04 | #5 |
Пользователь
Регистрация: 09.12.2008
Сообщений: 56
|
ИМХО
В примере было показано как избежать ситуации когда несколько запросов пришли в одно время. При этом формула корректно отработает любое количество одновременных и даст уникальное. Ведь каждое последующее будет на 1 больше. Ну а то что результат большой, так это издержки того что 1 - в Вашем случае = 1440 сделайте так (СЧЁТЕСЛИ($B$2:B3;B3)-1)/1440 Т.е формула будет выглядеть наверно так =A2+(B3-B2+(СЧЁТЕСЛИ($B$2:B3;B3)-1)/1440)*1440*СЛУЧМЕЖДУ(18;29)
обычно я на http://planetaexcel.ru/forum.php
|
18.07.2010, 18:38 | #6 |
Пользователь
Регистрация: 09.12.2008
Сообщений: 56
|
Держите пример, при повторе времени до 18 раз не дает одинаковых номеров, или что - то не учел.
Что бы числа не были большими увеличил разрядность делителя в примере 14400, играйтесь
обычно я на http://planetaexcel.ru/forum.php
|
18.07.2010, 18:53 | #7 |
Пользователь
Регистрация: 09.12.2008
Сообщений: 56
|
И просто вопрос. А то за Вашу формулу схватился.
Надо пронумеровать поступающие запросы по возрастанию отталкиваясь от значения в А2. А просто добавляя единицу при поступлении очередного? Ни как? Формула для ячейки А3 =ЕСЛИ(B3="";"";МАКС($A$2:A2)+1)
обычно я на http://planetaexcel.ru/forum.php
|
19.07.2010, 01:54 | #8 | ||
Заблокирован
Регистрация: 28.05.2010
Сообщений: 65
|
Цитата:
Разница последнего и первого номера запроса, даты и время поступления которых совпадают - не должна превышать максимальное количество запросов поступающих на сервер. Иначе будет мега-ультра-супер-DDoS Грубо-говоря: я писал - СЛУЧМЕЖДУ(1;17) - это от 1 до 17 запросов поступает за период от 1 до 59 секунд. (т. е. если время поступления повторяется). В этом случае исключение повторений номеров запросов при максимально возможном, и даже критическом (17) количестве повторений времени и даты поступления - как раз даст +1 к каждому запросу. (Физический смысл этой критической ситуации с повторами таков: в течении этого промежутка времени, который менее минуты - только с моего компьютера поступали запросы на сервер. И ни с одного другого. Эти запросы зарегистрированы мною.) СЛУЧМЕЖДУ(18;29) - это же значит что в максимально-возможный период, который может давать разницу даты - одну минуту, а именно период от 1:00 до 1:59 - поступает на сервер от 18 до 29 запросов. Благодарю Вас Igor67 за исключение равенства, но представленная Вами формула производит расчеты с датой в случае повторения, а затем делит на некий постоянный делитель. Видимо поэтому в первоначальном поданном Вами примере фотмат ячеек с копированной формулой являлся ДАТОЙ. Для решения этой задачи нужен сугубо числовой формат и числа при повторах даты и времени поступления запросов должны быть случайны... Цитата:
Запросы поступают только с моего ПК, и тут же регистрируются. Задача же рассматривает зарегистрированные в таблице запросы как часть из массы поступающих на сервер. Пронумеровать их нужно уникальными числами в порядке возрастания максимального и минимального пределов количества поступления запросов. Последний раз редактировалось %$PROregRAMi$t%; 19.07.2010 в 02:18. |
||
19.07.2010, 22:19 | #9 |
Пользователь
Регистрация: 09.12.2008
Сообщений: 56
|
Имхо
расчетов с датами в приведенной мною формуле нет. Она просто считает количество одинаковых данных. В Вашей формуле Вы обрабатываете дату и время (B3-B2) все это происходит не явно, поэтому Вы не обращаете на это внимания. затем Вы переводите полученные минуты Ехс в десятичную систему *1440 это легко проверить введя Ваши B3-B2 в свободную ячейку и в числовом формате 1мин=0,000694444446708076 Ну а так, как 1 для Ехс это 24 часа, одни сутки - как желаете для приведения к единому знаменателю и требуется деление. в общем я отвечаю на 1 вопрос. как избежать повторения ID при нескольких данных в единицу времени.
обычно я на http://planetaexcel.ru/forum.php
|
20.07.2010, 23:53 | #10 |
Заблокирован
Регистрация: 28.05.2010
Сообщений: 65
|
Т. е. задачу решить невозможно, или все-таки есть способы решения этой задачи с помощью Excel ? Если есть, то какие?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
поиск порядкового номера в pascale | счастливая | Помощь студентам | 1 | 17.05.2010 19:07 |
Физический рассчет сил. | meizy | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 12.04.2010 09:40 |
Паскаль. Перечислимый тип. Определение порядкового номера дня високосного года. | katya36 | Помощь студентам | 9 | 02.05.2009 13:56 |
исключение повторения номера акта за этот год | ГОСЕАН | БД в Delphi | 9 | 09.03.2008 02:50 |
Рассчет времени по координатам | Квэнди | Свободное общение | 5 | 28.12.2006 12:59 |