powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Оконные функции по оси времени
8 сообщений из 8, страница 1 из 1
Оконные функции по оси времени
    #38392800
korisk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица триплетов (id датчика, время, показание):
create table triplets (id bigint, time bigint, value float);

Нужно получить средние значения для датчиков 1,2 за время с 10 до 20?

Оконные функции работают только по значениям поля, с функцией не работают, во всяком случае в PostgreSQL.

Корректный запрос, но не отвечающий на поставленный вопрос:
select id, time, value, avg(value) over (partition by time,id) from triplets where id in (1,2);

Примерный закрос который вроде должен работать как надо, но не работает:
select id, time, value, avg(value) over (partition by (time > 10 and time < 20),id) from triplets where id in (1,2);

Вопрос:
Каким стандартным запросом получить средние значения для датчиков 1,2 за время с 10 до 20?
С помощью каких расширений можно решить задачу?

Может я чего-то не знаю, тогда поделитесь плз, ключевыми словами.

Спасибо.
...
Рейтинг: 0 / 0
Оконные функции по оси времени
    #38392807
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koriskКаким стандартным запросом получить средние значения для датчиков 1,2 за
время с 10 до 20?
Если бы время хранилось как у нормальный людей в поле типа TIME, то работал бы обычный
запрос без всякой аналитики:
Код: sql
1.
2.
3.
select id, avg(value) from triplets
  where id in (1,2) and "time" between time'10:00' and time'20:00'
  group by id


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оконные функции по оси времени
    #38392824
korisk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хаха! ) Спасибо большое. Что-то я перемудрил.
...
Рейтинг: 0 / 0
Оконные функции по оси времени
    #38392873
korisk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя нет. Это я вопрос не правильно сформулировал.

Нужне результат N запросов:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select avg(value2) from (select avg(value) as value2 from triplets
  where id in (1,2) and "time" between time'10:00' and time'14:00'  group by id) as val;

select avg(value2) from (select avg(value) as value2 from triplets
  where id in (1,2) and "time" between time'14:00' and time'18:00'  group by id) as val;

select avg(value2) from (select avg(value) as value2 from triplets
  where id in (1,2) and "time" between time'18:00' and time'22:00'  group by id) as val;
....


в виде:
time|value
10:00| xxx
14:00| yyy
18:00| zzz
...

либо

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select avg(value2) from (select avg(value) as value2 from triplets
  where id in (1,2) and "time" between time'10:00' and time'14:00'  group by id) as val;

select avg(value2) from (select avg(value) as value2 from triplets
  where id in (3,4) and "time" between time'10:00' and time'14:00'  group by id) as val;

select avg(value2) from (select avg(value) as value2 from triplets
  where id in (5,6) and "time" between time'10:00' and time'14:00'  group by id) as val;
....


id|value
1| xxx
3| yyy
5| zzz
...


Спасибо
...
Рейтинг: 0 / 0
Оконные функции по оси времени
    #38392898
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koriskХотя нет. Это я вопрос не правильно сформулировал.
Вторая попытка тоже провалилась. Иди ещё подумай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Оконные функции по оси времени
    #38392951
lookat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
korisk,

Данных нет, а потому непонятно:

1. Датчики дают показания через
фиксированный интервал времени?
То есть регулярно? Или нет?

2. Как изменяется из меняемая величина
Между показаниями, непрерывно или скачком?

3. Показания датчиков 1 и 2 синхронизированы по времени?

Ответы на эти вопросы влияют на метод вычисления среднего за период.

Удачи
...
Рейтинг: 0 / 0
Оконные функции по оси времени
    #38393068
korisk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovВторая попытка тоже провалилась. Иди ещё подумай.

Согласен, туплю, но ближайшее время надежда только на телепатов. :(
Возможно, это можно назвать вычислением агрегатной функции по квадрату.


lookat1. Датчики дают показания через
фиксированный интервал времени?
То есть регулярно? Или нет?

Да, регулярно.

lookat2. Как изменяется из меняемая величина
Между показаниями, непрерывно или скачком?

В общем случае скачком.

lookat3. Показания датчиков 1 и 2 синхронизированы по времени?
Удачи
Да, показания синхронизированы. (у одновременных "отсчетов" time одинаковый)

Спасибо.
...
Рейтинг: 0 / 0
Оконные функции по оси времени
    #38393081
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
korisk
Код: sql
1.
2.
select avg(value2) from (select avg(value) as value2 from triplets
  where id in (1,2) and "time" between time'10:00' and time'14:00'  group by id) as val;

b чем это отличается от обычного
Код: sql
1.
2.
select avg(value) as val from triplets
  where id in (1,2) and "time" between time'10:00' and time'14:00'

?
koriskВозможно, это можно назвать вычислением агрегатной функции по квадрату.по какому такому "квадрату"?
и вообще, не это ли вы ищете?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select cast(g.t as time) as _t,avg(f.r)
from 
generate_series(timestamp'2000-01-01 00:00:00',timestamp'2000-01-01 00:01:00',interval'4 second') as g(t) -- сюда подставить нужное мин/макс время
join
(select qwe.t,random()*100 as r from
 generate_series(timestamp'2000-01-01 00:00:00',timestamp'2000-01-01 00:01:00',interval'1 second') as qwe(t)
 ) f -- а это аналог исходной таблицы
on g.t<=f.t and f.t<g.t+interval '4 second'
group by _t
order by _t
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Оконные функции по оси времени
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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