powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Нарастающий итог
13 сообщений из 13, страница 1 из 1
Нарастающий итог
    #32457866
litr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица с двумя полями время и масса вида:
Time m
10:12:00 73
10:14:00 74
10:25:05 75
10:43:00 75
10:47:10 74
Нужно добавить поле со значениями, если масса увеличивается то "1", если уменьшается "-1", если не изменяется "0". Т.е должно получится:
Time m State
10:12:00 73 1
10:14:00 74 1
10:25:05 75 1
10:43:00 75 0
10:47:10 74 -1
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457875
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А записей в таблице очень много ?
А то я в ADO тебе напишу, а это долго выполняется...
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457879
litr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет немного, порядка 10-20.
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457880
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щас попробую...
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457886
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поищи по форуму топик "FAQ: что мы знаем о каунтерах". Там на последней странице (или предпоследней) есть способ нумерации записей в запросе. Аналогично и твою задачу решить можно.
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457901
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица: MyTable, Поля: Time, Massa, Itog

Public Function UpItog()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim dTime As Date
Dim intMassa As Integer
Set cnn = CurrentProject.Connection
rst.Open "Select * from MyTable Order by Time", cnn, adOpenKeyset, adLockPessimistic
dTime = rst!Time
intMassa = rst!massa
rst.MoveNext
Do Until rst.EOF
With rst
!itog = IIf(!massa > intMassa, "1", IIf(!massa < intMassa, "-1", "0"))
.Update
End With
dTime = rst!Time
intMassa = rst!massa
rst.MoveNext
Loop
rst.Close
cnn.Close
End Function
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457906
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так With использована чуть-чуть красивее...

Public Function UpItog()
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim dTime As Date
Dim intMassa As Integer
Set cnn = CurrentProject.Connection
rst.Open "Select * from MyTable Order by Time", cnn, adOpenKeyset, adLockPessimistic
With rst
dTime = !Time
intMassa = !massa
.MoveNext
Do Until .EOF
!itog = IIf(!massa > intMassa, "1", IIf(!massa < intMassa, "-1", "0"))
.Update
dTime = !Time
intMassa = !massa
.MoveNext
Loop
.Close
cnn.Close
End With
End Function
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457938
litr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Deminik.
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457947
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел в виду что-то вроде этого (при id - счетчик)
Запрос1:

select t1.id as id1, max(t2.id) as id2
from table1 as t1 left join table1 as t2 on t2.id<t1.id
group by id1

Запрос2:

select t1.*, ((nz(t1.m,0)<nz(t2.m,0)) - (nz(t1.m,0)>nz(t2.m,0))) as Delta
from table1 as t1 left join Запрос1 on t1.id=Запрос1.id1
left join table1 as t2 on t2.id=Запрос1.id2

(не проверял)
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457964
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, проверил:

Запрос1
Код: plaintext
1.
2.
SELECT t1.id AS id1, max(t2.id) AS id2
FROM table1 AS t1 LEFT JOIN table1 AS t2 ON t2.id<t1.id
GROUP BY t1.id;


Запрос2
Код: plaintext
1.
SELECT t1.*, ((nz(t1.m, 0 )<nz(t2.m, 0 )) - (nz(t1.m, 0 )>nz(t2.m, 0 ))) AS Delta
FROM (table1 AS t1 LEFT JOIN Запрос1 ON t1.id=Запрос1.id1) LEFT JOIN table1 AS t2 ON t2.id=Запрос1.id2;
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457965
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 GEO

Я тоже, сначала, хотел запросом сделать...что-то типа:
Взять текущюю запись, из нее извлечь ID, ID-1 (берем предыдущюю запись), сравниваем поля МАССА, пихаем результат IIF-а в текущюю запись....но понял - что мои познания SQL скудны для этого и в нем я не силен (в ADO, честно говоря, тоже...)...но, как я понимаю - если объемы большие, то SQL выполняется быстрее...Короче - я бы с удовольствием увидел вариант с SQL, для личного развития....
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457983
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во втором запросе орет, что ссылка на поле t1.m может относится к полям нескольких таблиц...
...
Рейтинг: 0 / 0
Нарастающий итог
    #32457998
Andrey Sk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня все получилось в точности как предложил GEO! И результат выдает правильный! ТОлько Аксесс ругается в первом запросе can't represent join represent t2.id<t1.id. И я его понимаю ;-) Но столкнулся с такой ситуацией столкнулся впервые - выражение синтаксически правильное, а вот отобразить его нельзя. Надо попробовать на серверных таблицах.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Нарастающий итог
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]