|
|
|
| Снова здравствуйте! Искренне надеюсь, что на этот раз вопрос окажется простым )
Как написать формулу в запросе, чтобы из последующей строки вычиталась предыдущая, и разница делилась на предыдущую? И вобще возможно ли это? ) | |
|
| |
|
|
|
| если есть ключевые поля, то я бы сделал left join к этой же самой таблице/запросу где ключевое поле запроса А = ключевое поле запроса Б+1 и потом просто ЗапросА.Сумма-ЗапросБ.Сумма... как то так | |
|
| |
|
|
|
|
...из последующей строки вычиталась предыдущая...
|
Научите строки запроса вычитать. | |
|
| |
|
|
|
| Lukas, нет, неправильно поняли, наверное. Необходимо создать формулу в запросе,, которая производила вышеупомянутую операцию со строками в таблице. Причем исключительно по одному столбцу. Знаю, что нельзя путать с экселем, но в последне это выглядело бы так: =(А2-А1)/А1. Так вот вопрос заключается в том, можно ли это сделать в аксессе.
Попробую сейчас вариант Кабана, но не уверен.. | |
|
| |
|
|
|
| Хорошо,
Научите строки таблицы вычитать
...из последующей строки вычиталась предыдущая...
То есть, значения полей текущей строки "по барабану"? | |
|
| |
|
|
|
| значения текщей строки минус значение предыдущей. Так вернее, если это, конечно, сильно меняет суть | |
|
| |
|
|
|
| ..если это, конечно, сильно меняет суть..
Ну, если у вас в рассчитываемых полях одинаковые значения во всей таблице, то, конечно не меняет.
Только в таком случае можно с расчетом и не заморачиваться. | |
|
| |
|
|
|
| нет, к сожалению, разные, иначе бы я этим расчетом не заморачивался. ) | |
|
| |
|
|
|
| Хорошо, с этим определились.
Так как все-таки "вычитать строки"?
Или, все-таки, необходимые действия нужно производить со значениями конкретного поля? | |
|
| |
|
|
|
| так, вобщем есть в таблице столбец (!) со значениями:
1000
1010
1015
1026
1030
И надо запросом создать другой столбец со значениями:
(1010 - 1000) / 1000
(1015 - 1010) / 1010
(1026 - 1015) / 1015
И т.д.
Не знаю, как понятней обзяснить ) хотя, как мне кажется имеено это я и имел в виду, когда объяснял до этого ) | |
|
| |
|
|
|
| Не могу судить, что вы имели в виду, могу судить только по тому, что вы писали.
Хорошо, определили: действия нужно производить со значениями столбца.
Теперь будем определять последовательность строк, дабы определить что считать "предыдущей строкой".
Последовательность строк в наборе данных определяется применением сортировки.
Как будем производить сортировку, что бы "предыдущей" оказалась именно та строка, которая нам нужна? | |
|
| |
|
|
|
| извиняюсь, но не понял, что вы имеете в в виду.. сейчас еще попробую "дообъяснить" задачу )
Идея в том, что этот столбец - стоимость актива на дату. То есть в базе данных не один стоблбец, а несколько, среди которых есть и даты, идущие по порядку:
25.07 1000
26.07 1010
27.07 1015
28.07 1026
И т.д.
Так вот для 1010 предыдущее - 1000, для 1015 - 1010,для 1026 - 1015 и т.д. | |
|
| |
|
|
|
| Это будем считать сортировкой по полю даты.
ИТОГО:
Создаем публичную функцию в модуле, которая будет считать коэффицент:
Public Function funRatio(Optional Amount)
Static PrevAm As Currency
If IsMissing(Amount) Then
PrevAm = 0
Else
If PrevAm > 0 Then funRatio = Round((Amount - PrevAm) / PrevAm, 4)
PrevAm = Amount
End If
End Function
|
Создаем запрос:
SELECT tblAm.DateAm, tblAm.Amount, funRatio(tblAm.Amount) AS Ratio
FROM tblAm
WHERE funRatio()=0 Or True
ORDER BY tblAm.DateAm;
|
Смотрим в нем результаты.
Как-то так, сильно не тестил. | |
|
| |
|
|
|
| Или так, правильнее:
Функция:
Public Function funRatio(Optional Amount)
Static PrevAm As Currency
If IsMissing(Amount) Then
PrevAm = 0
funRatio = 0
Else
If PrevAm > 0 Then funRatio = Round((Amount - PrevAm) / PrevAm, 4)
PrevAm = Amount
End If
End Function
|
Запрос:
SELECT tblAm.DateAm, tblAm.Amount, funRatio(tblAm.Amount) AS Ratio
FROM tblAm
WHERE funRatio()=0
ORDER BY tblAm.DateAm;
|
| |
|
| |
|
|
|
| ну пизд... так, скажите плз, где найти "модуль", в котором надо написать функцию, и я это сделаю )) | |
|
| |
|
11 Кб. |
|
| Окно базы данных, Вкладка "Модули", кнопка "Создать", откроется редактор VBA кода,
в нем новый модуль.
Копируем в него функцию, сохраняем.
Добавлено: образчик прицепил. | |
|
| |
|
|
|
| ок :)
Спасибо большое за помощь! | |
|
| |