![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Добрый день
Помогите решить следующую задачу Имеется таблица БД Access с полями: key (ключевое поле)Date, V 1 01.01.2014 0 2 02.01.2014 145 3 03.01.2014 302 4 04.01.2014 458 5 05.01.2014 621 Date - дата, V - показания счетчика воды Как с помощью ADOQuery создать вычисляемое поле, в каждой записи которого будет разница значений следующей записи поля V (если она есть) и текущей записи поля V? Под соседними записями подразумевается две соседние даты. Я делаю SQL-запрос, а при выводе в таблицу EhGrid сортирую по возрастанию даты. Результат должен получиться такой: key (ключевое поле), Date, V, dV 1 01.01.2014 0 145 2 02.01.2014 145 157 3 03.01.2014 302 156 4 04.01.2014 458 163 5 05.01.2014 621 dV - вычисляемое поле со значением суточного потребления воды Заранее спасибо за помощь Последний раз редактировалось chugastr, 27.02.2014 в 13:43. |
#2
|
|||
|
|||
![]() Ну, например, с помощью Window Functions. Хотя что-то я не уверен, что Access их поддерживает. Соответсвенно, придется извращаться с self-join. В общем, проблема в том, что порядок записей в возвращаемом результате никто не гарантирует. Поэтому клиентский код будет для таких вычислений проходиться по всей таблице для поиска нужной записи, либо сортировка (нужная) будет "прибита гвоздями". Ни один из этих вариантов не является хорошим.
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
chugastr (03.03.2014)
|
#3
|
||||
|
||||
![]() Если задача позволяет, можно делать этот пересчет при вставке новой записи
з.ы. Почему-то приходит на ум функция avg, может в дальнейшем поможет) Я за здоровый экстрим! Спасибо за "спасибо") |
Этот пользователь сказал Спасибо Mrak за это полезное сообщение: | ||
chugastr (03.03.2014)
|
#4
|
|||
|
|||
![]() Под следующей надо понимать запись, у которого дата на сутки больше. Через SELECT делается просто.
|
#5
|
|||
|
|||
![]() Цитата:
А можно по-подробнее, как сформировать нужный SQL-запрос с Select? А то я в этом вопросе совсем слаб Последний раз редактировалось chugastr, 27.02.2014 в 13:50. |
#6
|
||||
|
||||
![]() попробуй так
Код:
SELECT t.key, t.date, t.v, (COALESCE(t1.v, 0) - t.v) dv FROM table t LEFT JOIN table t1 ON t1.key = t.key + 1 Поживу - увижу, Доживу - узнаю, Выживу - учту. ![]() [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
chugastr (03.03.2014)
|