|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
Всем доброго времени суток! Уважаемые друзья, товарищи, гуру и профессионалы, помогите пожалуйста НЕпрофессионалам разобраться и решить задачку. Есть база куда пишутся показания с нескольких счетчиков(воды, но это не суть), каждую минуту. В базе 3 таблицы "FloatTable"(Поля видны на принтскрине), "StringTable"(Пустая таблица, не используется) и "TagTable"(Индексация тэгов, тэг - это грубо говоря счетчик). Запись в базу инициирует ПО которое обрабатывает(снимает) показания со счетчиков через контроллер. Необходимо получить следующую информацию (!создать отчеты!, возможно на основе запросов или любым другим способом, главное чтобы выполнялось относительно не долго и выдавало именно то что нам нужно :) ) : Необходимо посчитать количество единиц(в нашем случае это кубические метры - м3) 1. с выборкой по датам, например, с 03.12.2015 по 24.12.2015 Дата (в нашем случае каждая дата из диапазона) | Начальные показания на эту дату | Конечные показания на эту дату | Количество(конечн. - нач.) Вся загвоздка в том, что между датами получается перелет по показаниям... :( а нужно, чтобы начальные показания "становились"(были) конечными из предыдущей даты. 2. Подобный запрос за сутки (выбранная дата в форме) в разрезе по часам, то есть с 0 до 23 Дата(в нашем случае выбранная дата в форме) | Номер часа | Начальные показания на этот час | Конечные показания на этот час | Количество (Конечн. - начальн) Тут все тоже самое... :( получается перелет и нужно тоже самое, чтобы начальные становились конечными из прошлого часа В чем заключается "перелет": Показания в базу пишутся с интервалом в минуту (пишутся в 5-ю секунду каждой минуты, но не в этом суть :) ) это выглядит так: 23.12.2015 23:59:05 | 57849 24.12.2015 00:00:05 | 57855 и т.д. При создании запроса столкнулись с такой проблемой: при выводе - берем диапазон дат(выбираем в форме), далее фильтруем по индексу тэга, фильтруем по "Marker" (нам нужно по значению "В", тут не буду подробности сильно много объяснять, тут просто пишутся одинаковые значения - это особенность ПО, которое инициирует запись в базу), далее берем минимум на дату, и берем максимум на дату, и с помощью выражения: (Конечные - начальные) получаем количество за сутки но тут получается что если в запросе брать максимум на 23.12.2015 то это будет 57849, а минимум на 24.12.2015 будет 57855 и в связи с этим не будет учитываться уже целых 6 единиц в итоговой сумме запроса... тоже самое в запросе за сутки по часам... цифры указывал примерные, чтобы суть довести На этом форуме находили VBA коды, пытались решить с помощью них, но запросы выполняются нереально долго... (от 15 до 30 минут) Уже по всякому пробовали и по простому пытались и по сложному :) но результата пока не добились... а правда как всегда проста и наверняка где то рядом :) Помогите пожалуйста решить... ЗАРАНЕЕ ОЧЕНЬ БЛАГОДАРНЫ. З.ы. Оригиналы баз могу отправить на почту... (около 10 мб) З.ы. Еще немного описывал проблему тут: http://www.sql.ru/forum/342474-2/period-v-baze-ucheta-el-energii ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2015, 05:43 |
|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
ЮраСка, посмотрела предыдущую тему авторСчетчик 1.1=600 кВт, Счетчик 1.2=100 кВт, Счетчик 1.3=200 кВт Счетчик 1.1.1 =200 кВт, Счетчик 1.1.2=300 кВт В отчете должно быть так: Расход по Объекту 2 Счетчик 1 расход = 300 (1200-(600+100+200)) Счетчик 2 расход = 900 Счетчик 1.1 расход = 100 (600-(200+300)) Счетчик 1.2 расход = 100 Счетчик 1.3 расход = 200 Счетчик 1.1.1 расход = 200 Счетчик 1.1.2 расход = 300 Итого по объекту 2 расход = 2100 она не учитывает, что счетчики также --ремонтируются --заменяются на новые --или переставляются на другую ветку ДЕРЕВО СЧЕТЧИКОВ, зависящее еще и от даты ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2015, 08:26 |
|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, забыла еще переход через точку максимума показаний( после 9999 снова 0) и изменение начального показания при переустановках/ремонте ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2015, 08:29 |
|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА, дело в том что в моем примере не электроэнергия... и счетчики в ремонте не будут..., а даже если и будут... то ......... Запись в базу происходит следующим образом(по следующей схеме) информация передается: Счетчик----->Контроллер----->Сервер----->Программное обеспечение----->База Данных Вся эта схема отрабатывает за миллисекунды. То есть при условии что счетчик снимется, то показания будут приходить последние снятые... а это значит что количество будет 0, т.к. каждую минуту будет писаться одно и то же показание. Либо другой вариант... Сняли счетчик - сигнал на контроллер не идет, но на сервер отправляется последнее... можно программно попасть на контроллер и сказать ему - что показания счетчика 0... и будет писаться в Базу 0... следовательно и считаться не будет... а при выводе отчета будет ясно, что все по нулям... а значит этот счетчик остановлен... кстати у нас и такая ситуация бывает, что за несколько часов через счетчик ничего не проходит... и единиц не прибавилось... и соответственно что происходило с ним в это время нужно тоже отображать в отчете и то есть если показания не поменялись, значит и количество будет 0 а при переходе через 9999 на 0000 - тут все делает контроллер... он и гоняет также по кругу как счетчик... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2015, 10:00 |
|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
ЮраСкаНа этом форуме находили VBA коды, пытались решить с помощью них, но запросы выполняются нереально долго... (от 15 до 30 минут) Уже по всякому пробовали и по простому пытались и по сложному :) но результата пока не добились... а правда как всегда проста и наверняка где то рядом :) а может быть ещё хужее, с таким то количеством "мусора" :) можно завести доп. таблицу с промежуточными данными принимаемыми для расчёта... смотреть нужно короче. кстати, а "по сложному" это как? авторЗАРАНЕЕ ОЧЕНЬ БЛАГОДАРНЫ.а вас там сколько? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2015, 13:48 |
|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
SNiL, Нас двое :) (в отделе кто этим занимается) Выкладывал основное утром (+9, РС(Я)) К вечеру пришли к тому, что воспользовались промежуточной таблицей и частично применили пример от "-Практикант-" Но пока что это не предел совершенства. По простому - запросами через построитель. По сложному - с помощью создания функций вба кодом... От мусора избавиться нельзя, так как база создаётся от ПО, которое и пишет. В базе хранится месяц по двум щетчикам, за каждую минуту, такая вот особенность базы... Здоровый смех это конечно хорошо, но на войне как известно все средства хороши. А когда объединить все средства или лучшее от средств, то это будет еще лучше! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2015, 19:35 |
|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
ЮраСка, По ходу запрос должен вернуть минимальное значение счётчика в каждую дату. Потребление за сутки - разница между двумя такими запросами с разными датами. Если нужен другой период указывает нужные даты и время. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2015, 20:29 |
|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
ЮраСкаSNiL, Нас двое :) (в отделе кто этим занимается) Выкладывал основное утром (+9, РС(Я)) К вечеру пришли к тому, что воспользовались промежуточной таблицей и частично применили пример от "-Практикант-" Но пока что это не предел совершенства. По простому - запросами через построитель. По сложному - с помощью создания функций вба кодом... От мусора избавиться нельзя, так как база создаётся от ПО, которое и пишет. В базе хранится месяц по двум щетчикам, за каждую минуту, такая вот особенность базы... Здоровый смех это конечно хорошо, но на войне как известно все средства хороши. А когда объединить все средства или лучшее от средств, то это будет еще лучше! :)вы бы лучше показали свой код. и это, в какой теме лучше писать, а то плодим лишнее... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2015, 20:35 |
|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
ЮраСкаНа этом форуме находили VBA коды, пытались решить с помощью них, но запросы выполняются нереально долго... (от 15 до 30 минут) и сколько же примерно записей в обрабатываемой таблице? 24 часа*6о мин=1440 записей на 1 счетчик в день 43200 записей на счетчик в месяц --а счетчиков сколько --так ли уж нужны эти 43200 показаний в разрезе счетчикдатанач значконеч знач....128/12/2015 00:05 120001210028/12/2015 01:051210012300.. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2015, 21:20 |
|
Задачка с подсчетом показаний со счетчиков (помогите решить)
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАЮраСкаНа этом форуме находили VBA коды, пытались решить с помощью них, но запросы выполняются нереально долго... (от 15 до 30 минут) и сколько же примерно записей в обрабатываемой таблице? 24 часа*6о мин=1440 записей на 1 счетчик в день 43200 записей на счетчик в месяц --а счетчиков сколько --так ли уж нужны эти 43200 показаний в разрезе счетчикдатанач значконеч знач....128/12/2015 00:05 120001210028/12/2015 01:051210012300.. Да, нужно хранить именно месяц... Счетчиков пока 2 но в дальнейшем будет больше. Это база где все хранится. Обработка в другой происходит, как со связанными таблицами... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2015, 02:21 |
|
|
start [/forum/topic.php?fid=45&msg=39138451&tid=1614120]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
114ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 347ms |
total: | 553ms |
0 / 0 |