powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на вычисление средней хронологической за неравные интервалы
17 сообщений из 17, страница 1 из 1
Запрос на вычисление средней хронологической за неравные интервалы
    #39795601
vizit73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу помощи в составлении.

Есть следующая таблица:

ObjectNameParametеrDateTimeObject1301.04.201908:00:00Object1801.04.201912:00:00Object1601.04.201917:00:00Object1401.04.201921:00:00Object11002.04.201908:00:00

Хочу запросом вычислить среднюю величину Parametеr, за период (в данном случае сутки) причём промежутки времени не равны.
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795626
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vizit73,
Код: vbnet
1.
select objectName,avg(parametrer) as SR,myDate from tbl group by objectName,myDate

не обзывайте поля зарезервированными словами (Date)
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795647
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vizit73, а результат где?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT
  q1.ObjectName,
  q1.Date,
  SUM([q1].[Hours] * [q1].[Parametеr]) / SUM([q1].[Hours]) AS СрВзв
FROM (SELECT t2.ObjectName,
                     t2.Date,
                     HOUR([t2].[Time]) - Nz(HOUR(
                                                  (SELECT MAX(t1.Time)
                                                  FROM t AS t1
                                                  WHERE t1.[ObjectName] = t2.[ObjectName]
                                                           AND t1.[Date] = t2.[Date]
                                                           AND t1.[Time] < t2.[Time])
                     ), 0) AS Hours,
                     t2.Parametеr
         FROM t AS t2) AS q1
GROUP BY q1.ObjectName,
         q1.Date;

...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795651
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vizit73, в моём запросе я не учёл оставшиеся 3 часа до завершения суток. Тут следует подумать...
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795657
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургТут следует подумать...сейчас некогда
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795666
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Схема решения.

1) Объединяем дату и время в одно значение даты-времени.
2) Используя две копии таблицы, получаем данные в формате
Объект-Значение-ДатаВремя-СледующиеДатаВремя
При этом если СледующиеДатаВремя выскакивают за границу суток, то заменяем на 24:00 текущих суток.
3) Считаем
SUM(Значение * (СледующиеДатаВремя - ДатаВремя)) / SUM(СледующиеДатаВремя - ДатаВремя)
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795685
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В виде отдельных запросов (требует проверки/отладки):

Query1
Код: sql
1.
2.
3.
4.
SELECT ObjectName, 
       Parametеr, 
       [Date]+[Time] AS [DateTime]
FROM tablename


Query2
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT t1.ObjectName, 
       t1.Parametеr, 
       t1.[DateTime], 
       IIF(MIN(t2.[DateTime]) <= CDate("02.04.2019"), 
           MIN(t2.[DateTime]), 
           CDate("02.04.2019")) AS NextDateTime
FROM Query1 AS t1, 
     Query1 AS t2
WHERE t1.ObjectName = t2.ObjectName
  AND t1.[DateTime] < t2.t1.[DateTime]
GROUP BY t1.ObjectName, t1.Parametеr, t1.[DateTime]


Query3
Код: sql
1.
2.
3.
4.
SELECT t1.ObjectName, 
       SUM(Parametеr * (NextDateTime - [DateTime])) / SUM(NextDateTime - [DateTime]) AS AvgParameter
FROM Query2
WHERE DATE([DateTime]) = CDate("01.04.2019")
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795699
vizit73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панургvizit73, а результат где?

6,416667 если считать, как в файле Excel сделал

Но есть формула Средняя хронологическая , там иначе.
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795700
vizit73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuvizit73,
Код: vbnet
1.
select objectName,avg(parametrer) as SR,myDate from tbl group by objectName,myDate

не обзывайте поля зарезервированными словами (Date)

Ок, это я по быстрому пример хотел сделать.
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795705
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vizit73Но есть формула Средняя хронологическая , там иначе.Это называется средневзвешенное значение
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795709
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaСхема решения.

1) Объединяем дату и время в одно значение даты-времени.
....
Объект-Значение-ДатаВремя-СледующиеДатаВремя
При этом если СледующиеДатаВремя выскакивают за границу суток, то заменяем на 24:00 текущих суток.
....Че-то не понятно следующее:если поле "time"типа "краткий формат времени" как туда ввести неправильное (<0 или >=24) и объединив его с датой получить "СледующиеДатаВремя выскакивающие за границу суток"
(разве что "time" текст-что,по-моему, не правильно т.к.ведет к ошибкам-с временем,в данном случае, надо работать как со временем,а не текстом)
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39795742
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vizit73, как-то так...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT q1.ObjectName, q1.Date, Sum([q1].[Hours]*[q1].[Parametеr])/Sum([q1].[Hours]) AS СрВзв
FROM (
SELECT t2.ObjectName, t2.Date, Hour([t2].[Time])-Nz(Hour((SELECT Max(t1.Time) FROM t as t1 WHERE t1.[ObjectName]=t2.[ObjectName] and  t1.[Date]=t2.[Date] and t1.[Time]<t2.[Time])),0) AS Hours, t2.Parametеr FROM t AS t2
UNION ALL
SELECT t2.ObjectName, t2.Date, 24-Hour(Max([Time])) AS Hours, (SELECT TOP 1 t1.[Parametеr] FROM t as t1 WHERE t1.[ObjectName]=t2.[ObjectName] and  t1.[Date]>t2.[Date] ORDER BY t1.[Date], t1.[Time]) 
FROM t AS t2
GROUP BY t2.ObjectName, t2.Date
)  AS q1
GROUP BY q1.ObjectName, q1.Date;

Нужно проверять на данных...
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39796081
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuЧе-то не понятно следующее:если поле "time"типа "краткий формат времени" как туда ввести неправильное (<0 или >=24) и объединив его с датой получить "СледующиеДатаВремя выскакивающие за границу суток"Ну дык у него ж ещё и поле даты... а при вычислениях надо использовать полную дату. См. две последние записи примера данных.
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39811759
vizit73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал таким образом.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
SELECT qryThird.ObjectName, (Sum([qryThird].[expAvgParameter1HourPeriod])/Sum([qryThird].[expHourPeriod])) AS expAVGParameter1, (Sum([qryThird].[expAvgParameter2HourPeriod])/Sum([qryThird].[expHourPeriod])) AS expAVGParameter2
FROM [SELECT 
	qrySecond.ObjectName, 
	(qrySecond.Parameter1+ 
		(Select 
			Top 1 Parameter1 
		From 
			qryFirst 
		Where 
			[qryFirst].ObjectName=[qrySecond].ObjectName AND [qryFirst].expDateTime<[qrySecond].expDateTime 
		ORDER BY 
			expDateTime DESC))/2 AS expAvgParameter1, 
	(qrySecond.Parameter2+ 
		(Select 
			Top 1 Parameter2 
		From 
			qryFirst 
		Where 
			[qryFirst].ObjectName=[qrySecond].ObjectName AND [qryFirst].expDateTime<[qrySecond].expDateTime 
		ORDER BY 
			expDateTime DESC))/2 AS expAvgParameter2,
	Hour (qrySecond.expDateTime- 
		(Select 
			Top 1 expDateTime 
		From 
			qryFirst 
		Where 
			[qryFirst].ObjectName=[qrySecond].ObjectName AND [qryFirst].expDateTime<[qrySecond].expDateTime 
		ORDER BY 
			expDateTime DESC)) AS expHourPeriod, 
	expAvgParameter1*expHourPeriod As expAvgParameter1HourPeriod,
	expAvgParameter2*expHourPeriod As expAvgParameter2HourPeriod
FROM 
	qryFirst AS qrySecond]. AS qryThird
GROUP BY qryThird.ObjectName;



А вот как быть если одно значение Parameter равно NULL?
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39811791
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vizit73Прошу помощи в составлении.

Есть следующая таблица:

ObjectNameParametеrDateTimeObject1301.04.201908:00:00Object1801.04.201912:00:00Object1601.04.201917:00:00Object1401.04.201921:00:00Object11002.04.201908:00:00

Хочу запросом вычислить среднюю величину Parametеr, за период (в данном случае сутки) причём промежутки времени не равны.

Хотеть - не вредно.

Но, чтобы что-то там "вычислить" надо огласить как значение Parametеr и интервал времени соотносятся.

1. Если Parametеr измерен в МОМЕНТ времени Time, то
Код: sql
1.
select objectName, avg(parametrer) as SR, myDate from tbl group by objectName, myDate


и никак ты интервалов не учтешь. Ибо невозможно.

2. Если Parametеr измерен с МОМЕНТа времени Time до следующего МОМЕНТа времени Time

Код: sql
1.
select objectName, sum( parametrer * (Time_Следующий -  Time) ) / sum( (Time_Следующий -  Time) ) as SR, myDate from tbl group by objectName, myDate



если интервал усреденения сутки

Код: sql
1.
select objectName, sum( parametrer * (Time_Следующий -  Time) ) / [сутки] as SR, myDate from tbl group by objectName, myDate


причем для разницы времени и длительности суток надо выбрать в чем измерять: в часах, минутах или наносекундах.
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39811836
vizit73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222vizit73Прошу помощи в составлении.

Есть следующая таблица:

ObjectNameParametеrDateTimeObject1301.04.201908:00:00Object1801.04.201912:00:00Object1601.04.201917:00:00Object1401.04.201921:00:00Object11002.04.201908:00:00

Хочу запросом вычислить среднюю величину Parametеr, за период (в данном случае сутки) причём промежутки времени не равны.

Хотеть - не вредно.

Но, чтобы что-то там "вычислить" надо огласить как значение Parametеr и интервал времени соотносятся.

1. Если Parametеr измерен в МОМЕНТ времени Time, то
Код: sql
1.
select objectName, avg(parametrer) as SR, myDate from tbl group by objectName, myDate


и никак ты интервалов не учтешь. Ибо невозможно.

2. Если Parametеr измерен с МОМЕНТа времени Time до следующего МОМЕНТа времени Time

Код: sql
1.
select objectName, sum( parametrer * (Time_Следующий -  Time) ) / sum( (Time_Следующий -  Time) ) as SR, myDate from tbl group by objectName, myDate



если интервал усреденения сутки

Код: sql
1.
select objectName, sum( parametrer * (Time_Следующий -  Time) ) / [сутки] as SR, myDate from tbl group by objectName, myDate


причем для разницы времени и длительности суток надо выбрать в чем измерять: в часах, минутах или наносекундах.

Спасибо за ответ, но данный момент уже решён.
Используется Хронологическая взвешенная . В качестве интервала между соседними записями параметров используются часы, среднее (хронологическое взвешенное) вычисляется да за сутки.

На данный момент меня интересует как построить запрос, что бы он игнорировал в вычислении значения допустим Parameter1 равный NULL на определённое время, при этом Parameter2 если он не равен NULL на тот же час из вычислений не выпадал.
...
Рейтинг: 0 / 0
Запрос на вычисление средней хронологической за неравные интервалы
    #39904373
vizit73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Таки столкнулся с Null в таблице, бывают ситуации когда часть данных не заносится.

ObjectNameParametеr1Parametеr2DateTimeObject13301.04.201908:00:00Object18801.04.201912:00:00Object16601.04.201917:00:00Object14Null01.04.201921:00:00Object1101002.04.201908:00:00

Код: sql
1.
2.
3.
4.
5.
PARAMETERS [Forms]![frm1]![dtpFrom] DateTime, [Forms]![frm1]![cboFrom] DateTime, [Forms]![frm1]![dtpTo] DateTime, [Forms]![frm1]![cboTo] DateTime;
SELECT tblData.ObjectName, tblData.Parameter1, tblData.Parameter2, [DateParam]+[TimeParam] AS expDateTime
FROM tblData
WHERE ((([DateParam]+[TimeParam]) Between ([Forms]![frm1]![dtpFrom])+([Forms]![frm1]![cboFrom]) And ([Forms]![frm1]![dtpTo])+([Forms]![frm1]![cboTo])))
ORDER BY tblData.ObjectName, [DateParam]+[TimeParam];



Получается при отборе в вычисления попадает Null по Parametеr2. Если отсеивать записи по Null, тогда отсеивается у Object1 Parametеr1=4, а также дата и время, дальнейший расчёт по Parametеr1 не верный.
Прошу помочь составить запрос на отбор данных из таблицы, так для Object1 выпадал Parametеr2=Null но оставался Parametеr1=4 c датой и временем.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на вычисление средней хронологической за неравные интервалы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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