Задачка с подсчетом показаний со счетчиков (помогите решить)

ЮраСка
Дата: 25.12.2015 05:43:11
Всем доброго времени суток!
Уважаемые друзья, товарищи, гуру и профессионалы, помогите пожалуйста НЕпрофессионалам разобраться и решить задачку.
Есть база куда пишутся показания с нескольких счетчиков(воды, но это не суть), каждую минуту. В базе 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 08:26:04
ЮраСка,

посмотрела предыдущую тему
автор
Счетчик 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:29:08
ПЕНСИОНЕРКА,
забыла еще переход через точку максимума показаний( после 9999 снова 0)
и изменение начального показания при переустановках/ремонте
ЮраСка
Дата: 25.12.2015 10:00:01
ПЕНСИОНЕРКА,

дело в том что в моем примере не электроэнергия...
и счетчики в ремонте не будут..., а даже если и будут... то .........

Запись в базу происходит следующим образом(по следующей схеме) информация передается: Счетчик----->Контроллер----->Сервер----->Программное обеспечение----->База Данных
Вся эта схема отрабатывает за миллисекунды.

То есть при условии что счетчик снимется, то показания будут приходить последние снятые... а это значит что количество будет 0, т.к. каждую минуту будет писаться одно и то же показание.

Либо другой вариант... Сняли счетчик - сигнал на контроллер не идет, но на сервер отправляется последнее... можно программно попасть на контроллер и сказать ему - что показания счетчика 0... и будет писаться в Базу 0... следовательно и считаться не будет...
а при выводе отчета будет ясно, что все по нулям... а значит этот счетчик остановлен... кстати у нас и такая ситуация бывает, что за несколько часов через счетчик ничего не проходит... и единиц не прибавилось... и соответственно что происходило с ним в это время нужно тоже отображать в отчете и то есть если показания не поменялись, значит и количество будет 0

а при переходе через 9999 на 0000 - тут все делает контроллер... он и гоняет также по кругу как счетчик...
SNiL
Дата: 25.12.2015 13:48:39
ЮраСка
На этом форуме находили VBA коды, пытались решить с помощью них, но запросы выполняются нереально долго... (от 15 до 30 минут)
Уже по всякому пробовали и по простому пытались и по сложному :) но результата пока не добились... а правда как всегда проста и наверняка где то рядом :)

а может быть ещё хужее, с таким то количеством "мусора" :) можно завести доп. таблицу с промежуточными данными принимаемыми для расчёта... смотреть нужно короче.
кстати, а "по сложному" это как?
автор
ЗАРАНЕЕ ОЧЕНЬ БЛАГОДАРНЫ.
а вас там сколько?
ЮраСка
Дата: 25.12.2015 19:35:49
SNiL,

Нас двое :) (в отделе кто этим занимается)

Выкладывал основное утром (+9, РС(Я))
К вечеру пришли к тому, что воспользовались промежуточной таблицей и частично применили пример от "-Практикант-"

Но пока что это не предел совершенства.

По простому - запросами через построитель. По сложному - с помощью создания функций вба кодом...

От мусора избавиться нельзя, так как база создаётся от ПО, которое и пишет.

В базе хранится месяц по двум щетчикам, за каждую минуту, такая вот особенность базы...

Здоровый смех это конечно хорошо, но на войне как известно все средства хороши. А когда объединить все средства или лучшее от средств, то это будет еще лучше! :)
Bobgos
Дата: 25.12.2015 20:29:13
ЮраСка,

По ходу запрос должен вернуть минимальное значение счётчика в каждую дату. Потребление за сутки - разница между двумя такими запросами с разными датами.
Если нужен другой период указывает нужные даты и время.
SNiL
Дата: 25.12.2015 20:35:50
ЮраСка
SNiL,

Нас двое :) (в отделе кто этим занимается)

Выкладывал основное утром (+9, РС(Я))
К вечеру пришли к тому, что воспользовались промежуточной таблицей и частично применили пример от "-Практикант-"

Но пока что это не предел совершенства.

По простому - запросами через построитель. По сложному - с помощью создания функций вба кодом...

От мусора избавиться нельзя, так как база создаётся от ПО, которое и пишет.

В базе хранится месяц по двум щетчикам, за каждую минуту, такая вот особенность базы...

Здоровый смех это конечно хорошо, но на войне как известно все средства хороши. А когда объединить все средства или лучшее от средств, то это будет еще лучше! :)
вы бы лучше показали свой код.
и это, в какой теме лучше писать, а то плодим лишнее...
ПЕНСИОНЕРКА
Дата: 25.12.2015 21:20:26
ЮраСка
На этом форуме находили VBA коды, пытались решить с помощью них, но запросы выполняются нереально долго... (от 15 до 30 минут)


и сколько же примерно записей в обрабатываемой таблице?
24 часа*6о мин=1440 записей на 1 счетчик в день
43200 записей на счетчик в месяц

--а счетчиков сколько
--так ли уж нужны эти 43200 показаний в разрезе


счетчикдатанач значконеч знач....
128/12/2015 00:05 1200012100
28/12/2015 01:051210012300
..
ЮраСка
Дата: 26.12.2015 02:21:32
ПЕНСИОНЕРКА
ЮраСка
На этом форуме находили VBA коды, пытались решить с помощью них, но запросы выполняются нереально долго... (от 15 до 30 минут)


и сколько же примерно записей в обрабатываемой таблице?
24 часа*6о мин=1440 записей на 1 счетчик в день
43200 записей на счетчик в месяц

--а счетчиков сколько
--так ли уж нужны эти 43200 показаний в разрезе


счетчикдатанач значконеч знач....
128/12/2015 00:05 1200012100
28/12/2015 01:051210012300
..


Да, нужно хранить именно месяц... Счетчиков пока 2 но в дальнейшем будет больше.
Это база где все хранится.
Обработка в другой происходит, как со связанными таблицами...