Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вычисление среднего значения поля в двух смежных строках запроса. / 15 сообщений из 15, страница 1 из 1
25.01.2018, 12:48
    #39590840
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление среднего значения поля в двух смежных строках запроса.
Приветствую всех! Уважаемые профессионалы, подскажите, как это реализовать. Есть запрос, в котором каждому значению времени (В) соответствует параметр П0. Дискретность времени -30мин. Мне надо добавить в запрос параметр ПЧ, в строки, где В равно полный час, который будет равен среднему значению П0 предыдущей строки и текущей, как на 2-й картинке. Причем в первой строке параметр ПЧ должен быть 0, т.к. предидущей строки нет. Не знаю, понятно сформулировал вопрос?
...
Рейтинг: 0 / 0
25.01.2018, 12:49
    #39590841
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление среднего значения поля в двух смежных строках запроса.
Уточнение: это и есть 2-я картинка
...
Рейтинг: 0 / 0
25.01.2018, 15:02
    #39590999
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление среднего значения поля в двух смежных строках запроса.
Посчитайте среднее в подзапросе, группируя по времени, урезанном до часов, и привяжите его по времени по-левому к своей таблице.
...
Рейтинг: 0 / 0
25.01.2018, 15:14
    #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
25.01.2018, 16:14
    #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
25.01.2018, 16:27
    #39591082
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление среднего значения поля в двух смежных строках запроса.
БД с таблицей в студию.
И уточните - гарантируется ли отсутствие "дырок" во времени...
...
Рейтинг: 0 / 0
25.01.2018, 16:44
    #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
25.01.2018, 16:45
    #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
25.01.2018, 16:45
    #39591100
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление среднего значения поля в двух смежных строках запроса.
Akina,
Выкладываю базу. Исходный запрос - Запрос3, вычислямый запрос- Запрос5.
Исходим из того, что дыр во времени не будет.
...
Рейтинг: 0 / 0
25.01.2018, 18:28
    #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
25.01.2018, 18:29
    #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
25.01.2018, 23:57
    #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
27.01.2018, 10:30
    #39592096
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление среднего значения поля в двух смежных строках запроса.
alecko, Спасибо! Вроде работает! Проверяю дальше.
...
Рейтинг: 0 / 0
08.02.2018, 23:18
    #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
26.02.2018, 14:50
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вычисление среднего значения поля в двух смежных строках запроса. / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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