powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите плиз с запросом
4 сообщений из 4, страница 1 из 1
Помогите плиз с запросом
    #39517991
vlad_gg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день

Есть таблица, в которую пишутся показания сенсоров вместе с датой сбора.
Структура таблицы примерно такая:

value | date | sensor_id
-------------------------------
1 | 2017-08-23 | 1
5 | 2017-08-24 | 1
7 | 2017-08-25 | 1
10 | 2017-08-26 | 1
8 | 2017-08-27 | 1
...
100 | 2017-08-23 | 2
120 | 2017-08-24 | 2
110 | 2017-08-25 | 2
180 | 2017-08-26 | 2
200 | 2017-08-27 | 2


Мне нужно получить аггрегированые данные сенсоров по времени:
- нужна разница между самым первым и самым последним показателем
(для sensor_id=1 это будет "8 - 1 = 7")
- среднее значение показателей за все время
(для sensor_id=1 это будет "(1 + 5 + 7 + 10 + 8) / 5 = 6.2")

Помогите пожалуйста с запросом.
...
Рейтинг: 0 / 0
Помогите плиз с запросом
    #39518192
Mr.DKSoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
create table xTest(
value int
,"date" date
,sensor_id int
);
insert into xTest
VALUES
(1,'2017-08-23',1)
,(5 , '2017-08-24' , 1)
,(7 , '2017-08-25' , 1)
,(10, '2017-08-26' , 1)
,(8 , '2017-08-27' , 1)
,(100 , '2017-08-23' , 2)
,(120 , '2017-08-24' , 2)
,(110 , '2017-08-25' , 2)
,(180 , '2017-08-26' , 2)
,(200 , '2017-08-27' , 2)
;

1)

with d as
(
select sensor_id
,max(date) as dmax
,min(date) as dmin

from xTest
group by sensor_id
)

select d.sensor_id
,mxV.Value-mnv.Value as d
from D D
,xTest mnV
,xTest mxV
where D.sensor_id=mnV.sensor_id
and D.dmin=mnv.date
and D.sensor_id=mxV.sensor_id
and D.dmax=mxv.date

2)
select sensor_id
,avg(value) as middlev
from xTest
group by sensor_id
...
Рейтинг: 0 / 0
Помогите плиз с запросом
    #39518224
vlad_gg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr.DKSoftcreate table xTest(
value int
,"date" date
,sensor_id int
);
insert into xTest
VALUES
(1,'2017-08-23',1)
,(5 , '2017-08-24' , 1)
,(7 , '2017-08-25' , 1)
,(10, '2017-08-26' , 1)
,(8 , '2017-08-27' , 1)
,(100 , '2017-08-23' , 2)
,(120 , '2017-08-24' , 2)
,(110 , '2017-08-25' , 2)
,(180 , '2017-08-26' , 2)
,(200 , '2017-08-27' , 2)
;

1)

with d as
(
select sensor_id
,max(date) as dmax
,min(date) as dmin

from xTest
group by sensor_id
)

select d.sensor_id
,mxV.Value-mnv.Value as d
from D D
,xTest mnV
,xTest mxV
where D.sensor_id=mnV.sensor_id
and D.dmin=mnv.date
and D.sensor_id=mxV.sensor_id
and D.dmax=mxv.date

2)
select sensor_id
,avg(value) as middlev
from xTest
group by sensor_id


Спасибо большое, работает !
(хоть и очень медленно :) )
...
Рейтинг: 0 / 0
Помогите плиз с запросом
    #39518267
Mr.DKSoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуйте создать индекс
create index on xTest(sensor_id,date)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите плиз с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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