Всем доброго времени суток!
Уважаемые друзья, товарищи, гуру и профессионалы, помогите пожалуйста НЕпрофессионалам разобраться и решить задачку.
Есть база куда пишутся показания с нескольких счетчиков(воды, но это не суть), каждую минуту. В базе 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 http://www.sql.ru/forum/1192426/zadachka-s-podschetom-pokazaniy-so-schetchikov-pomogite-reshit