powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вычисление среднего значения поля в двух смежных строках запроса.
15 сообщений из 15, страница 1 из 1
Вычисление среднего значения поля в двух смежных строках запроса.
    #39590840
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех! Уважаемые профессионалы, подскажите, как это реализовать. Есть запрос, в котором каждому значению времени (В) соответствует параметр П0. Дискретность времени -30мин. Мне надо добавить в запрос параметр ПЧ, в строки, где В равно полный час, который будет равен среднему значению П0 предыдущей строки и текущей, как на 2-й картинке. Причем в первой строке параметр ПЧ должен быть 0, т.к. предидущей строки нет. Не знаю, понятно сформулировал вопрос?
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39590841
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточнение: это и есть 2-я картинка
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39590999
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посчитайте среднее в подзапросе, группируя по времени, урезанном до часов, и привяжите его по времени по-левому к своей таблице.
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39591010
`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
`
Гость
Код: sql
1.
2.
select T1.*, (T1.П0+T2.П0) / 2.0 as ПЧ
from T T1 left join T T2 on T1.В=dateadd("n",30,T2.В)
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39591062
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
`
Код: sql
1.
2.
select T1.*, (T1.П0+T2.П0) / 2.0 as ПЧ
from T T1 left join T T2 on T1.В=dateadd("n",30,T2.В)

Что-то получилось, но не все корректно. Вставляет вычисления в строки, где не нужно, и наоборот, некоторые нужные строки оставляет пустыми.
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39591082
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БД с таблицей в студию.
И уточните - гарантируется ли отсутствие "дырок" во времени...
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39591097
`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
`
Гость
`
Код: sql
1.
2.
select T1.*, IIf(datepart("n",T1.В)=0, (T1.П0+T2.П0) / 2.0, null) as ПЧ
from T T1 left join T T2 on T1.В=dateadd("n",-30,T2.В)
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39591099
Чтоб не было лишних вычислений:
Код: sql
1.
select T1.*, IIF(Minute(T1.П0 = 0, (T1.П0+T2.П0) / 2.0) as ПЧ


То, что отсутствуют некоторые нужные вычисления, то, видимо, какие-то расхождения в секундах/долях секунд. Попробуйте так:
Код: sql
1.
from T T1 left join T T2 on Format(T1.В,'HH:NN') = Format(dateadd("n",30,T2.В),'HH:NN')

А в вашем запросе всегда одна точка и одна дата? Если нет, то join on надо их добавить.
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39591100
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Выкладываю базу. Исходный запрос - Запрос3, вычислямый запрос- Запрос5.
Исходим из того, что дыр во времени не будет.
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39591192
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
``
Код: sql
1.
2.
select T1.*, IIf(datepart("n",T1.В)=0, (T1.П0+T2.П0) / 2.0, null) as ПЧ
from T T1 left join T T2 on T1.В=dateadd("n",-30,T2.В)


Тоже некорректно считает(.
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39591195
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев )Чтоб не было лишних вычислений:
Код: sql
1.
select T1.*, IIF(Minute(T1.П0 = 0, (T1.П0+T2.П0) / 2.0) as ПЧ


То, что отсутствуют некоторые нужные вычисления, то, видимо, какие-то расхождения в секундах/долях секунд. Попробуйте так:
Код: sql
1.
from T T1 left join T T2 on Format(T1.В,'HH:NN') = Format(dateadd("n",30,T2.В),'HH:NN')

А в вашем запросе всегда одна точка и одна дата? Если нет, то join on надо их добавить.
Чего то не хватает в коде.
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39591372
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wladimirrr,
интересная задачка и решение уже найдено, чуток поправлю.
не заморачивался сильно с проверкой, вроде результат норм.
запрос 5
SELECT T1.*, T2.П0, (T1.П0+T2.П0)/2 AS ПЧ
FROM Запрос3 AS T1 LEFT JOIN Запрос3 AS T2 ON T1.B1=TimeSerial(Hour(T2.B1),Minute(T2.B1)+30,0)
WHERE minute(T1.B1)=0;
запрос 3
SELECT Код, fldТочкаУчета, Д, TimeSerial(Hour([В]),Minute([В]),0) AS B1, П0
FROM Таблица1;

P.s. Имена полей лучше латиницей писать - программировать проще.
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39592096
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko, Спасибо! Вроде работает! Проверяю дальше.
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39599434
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleckowladimirrr,
интересная задачка и решение уже найдено, чуток поправлю.
не заморачивался сильно с проверкой, вроде результат норм.
запрос 5
SELECT T1.*, T2.П0, (T1.П0+T2.П0)/2 AS ПЧ
FROM Запрос3 AS T1 LEFT JOIN Запрос3 AS T2 ON T1.B1=TimeSerial(Hour(T2.B1),Minute(T2.B1)+30,0)
WHERE minute(T1.B1)=0;
запрос 3
SELECT Код, fldТочкаУчета, Д, TimeSerial(Hour([В]),Minute([В]),0) AS B1, П0
FROM Таблица1;

P.s. Имена полей лучше латиницей писать - программировать проще.
Alecko, если точка учета одна, все нормально считает. А если их несколько с теми-же значениями времени, получается "каша".
Что надо добавить в Запрос5?
...
Рейтинг: 0 / 0
Вычисление среднего значения поля в двух смежных строках запроса.
    #39607331
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wladimirrr, наверное уже решили, если нет - попробуйте так
Код: vbnet
1.
2.
3.
SELECT T1.*, T2.П0, (T1.П0+T2.П0)/2 AS ПЧ
FROM Запрос3 AS T1 LEFT JOIN Запрос3 AS T2 ON T1.B1=TimeSerial(Hour(T2.B1),Minute(T2.B1)+30,0)
WHERE (((Minute([T1].[B1]))=0) AND ((IIf([T1].[fldТочкаУчета]=[T2].[fldТочкаУчета],0,1))=0));

...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вычисление среднего значения поля в двух смежных строках запроса.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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