powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / запрос или процедура
8 сообщений из 8, страница 1 из 1
запрос или процедура
    #33166080
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица Table(id, name, cost, time) //time ограничено днем
необходимо вывести по каждому name, мах(cost), min(cost) в дне разбитом на определенные промежутки промежутки.(по 1 мин, по 15 и т.д.)

т.е. что такое
Код: plaintext
1.
2.
3.
4.
name мах(cost) min(cost) time {time : time+ 15 }
name мах(cost) min(cost) time {time+ 15  : time+ 30 }//и так до конца дня
...
name1 мах(cost) min(cost) time {time : time+ 15 }
name1 мах(cost) min(cost) time {time+ 15  : time+ 30 }

как это сделать? Возможно ли запросом или необходимо написать процедуру?
Заранее благодарен, Павел.
...
Рейтинг: 0 / 0
запрос или процедура
    #33166157
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.... group by name,time%15;

идея ясна или подробнее надо? :)
...
Рейтинг: 0 / 0
запрос или процедура
    #33166233
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
время определено как "TTS" TIMESTAMP WITH TIME ZONE NOT NULL
Код: plaintext
1.
select "NAME", max("HIGH"), min("LOW"), sum("VOL") from "TABLE" 
GROUP by "NAME","TTS"% 15 ;
ERROR: operator does not exist: timestamp with time zone % integer
...
Рейтинг: 0 / 0
запрос или процедура
    #33166790
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yну епрст,если башкой подумать то получится :


... group by name,(extract('epoch' from (time-date_trunc('day',time)))/(60*15))::int


подсказка была в том что в group by можно выражения ставить..
в данном случае я взял количество ЦЕЛЫХ 15ти минуток с начала дня до time и сгрупировал по этому значению
...
Рейтинг: 0 / 0
запрос или процедура
    #33166821
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно впринцыпе убрать

'-date_trunc('day',time)'

группировать всеравно будет правильно

group by name,extract('epoch' from time)::int/(60*15)
...
Рейтинг: 0 / 0
запрос или процедура
    #33167037
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо, очень помогли,
спасибо,
а как обратно преобразовать числа в дату, что-то никак не найду функцию.
как то не могу разобраться с этими секундами.
С уважением ,Павел.
...
Рейтинг: 0 / 0
запрос или процедура
    #33167068
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо было сраз попросить готовый запрос :)

select
name,
max("HIGH"), min("LOW"), sum("VOL"),
date_trunc('day',time)+(extract('epoch' from time-date_trunc('day',time))::int/(60*15)*15 || ' min')::interval as from_time
,date_trunc('day',time)+(extract('epoch' from time-date_trunc('day',time))::int/(60*15)*15+15 || ' min')::interval as to_time
from "TABLE"
group by name,extract('epoch' from time)::int/(60*15)
...
Рейтинг: 0 / 0
запрос или процедура
    #33168516
puzzle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо все заработало, только надо было в группировку to_time и from_time добавить.
и еще необходимо вывести первую и последнюю строку (по времени) в промежутке.
поломал голову и сделал так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT * FROM "XETRA_ARCH_MIN"
WHERE "NAME" = 'ADS'
 AND "TTS" in (
SELECT  max("TTS")
FROM "XETRA_ARCH_MIN"
WHERE "NAME" = 'ADS'  
GROUP BY "NAME",extract('epoch' from "TTS")::int/( 60 * 12 ), date_trunc('day',"TTS")+(extract('epoch' from "TTS" - date_trunc('day',"TTS"))::int/( 60 * 12 )* 12  || ' min')::interval
,date_trunc('day',"TTS")+(extract('epoch' from "TTS" - date_trunc('day',"TTS"))::int/( 60 * 12 )* 12 + 12  || ' min')::interval
)
OR
"TTS" in (
SELECT  min("TTS")
FROM "XETRA_ARCH_MIN"
WHERE "NAME" = 'ADS'
GROUP BY "NAME",extract('epoch' from "TTS")::int/( 60 * 12 ), date_trunc('day',"TTS")+(extract('epoch' from "TTS" - date_trunc('day',"TTS"))::int/( 60 * 12 )* 12  || ' min')::interval
,date_trunc('day',"TTS")+(extract('epoch' from "TTS" - date_trunc('day',"TTS"))::int/( 60 * 12 )* 12 + 12  || ' min')::interval
)

если есть какие нить предложения по усовершенствованию или как это можно вывести в том предыдущем запросе?
Заранее благодарен, Павел.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / запрос или процедура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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