Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Процедура выборки из двух таблиц / 17 сообщений из 17, страница 1 из 1
20.06.2006, 13:54
    #33802523
postt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
Есть две таблицы: T1 (p1 double, p2 int, p3 timestamp) и T2 (p1 double, p2 int p3 date). Таблица T2 - это агрегация таблицы T1 по времени (в ней суммируется поле p1 для каждого p2 раз в сутки,а в таблице T1 хранятся почасовые данные).
Требуется написать процедуру, которая возвращает агрегированные посуточно данные из таблицы T2 с начала месяца до текущего дня не включительно (так как они попадают туда только в 00:00:00), а также данные за неполный сегодняшний день (агрегируя их) из таблицы T1.
Требуется написать функцию, в которую как параметр заносится дата, начиная с которой выводить данные.
И еще как сделать, чтобы автоматически в определенное время выполнялось это агрегирование средствами Postgres. Сейчас это делается cron-ом.
Заранее спасибо за помощь,а то я начинающий в написании функций(процедур).
...
Рейтинг: 0 / 0
20.06.2006, 14:24
    #33802644
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select sum(p1), p2, p3
  from t1
 where date_trunc('day', p3) = current_date
 group by p2, p3
 union
select p1, p2, p3
  from t2
 where p3 > date_trunc('month', p3)
...
Рейтинг: 0 / 0
20.06.2006, 14:25
    #33802649
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
зы: не проверял
...
Рейтинг: 0 / 0
20.06.2006, 14:48
    #33802777
postt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
А как это оформить в виде функции, в которою передается дата, начиная с которой выводить данные, меня с этим в основном проблемы?
...
Рейтинг: 0 / 0
20.06.2006, 14:58
    #33802831
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create or replace function t1_agr(date)
  returns setof t1 as
'
select sum(p1), p2, p3
  from t1
 where date_trunc(''day'', p3) = current_date
 group by p2, p3
 union
select p1, p2, p3
  from t2
 where p3 > $1;
' language sql;

почитай тут

зы: не проверял
...
Рейтинг: 0 / 0
20.06.2006, 14:59
    #33802838
postt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
И как сделать средствами Postgres автоматическое выполнение заданной процедуры в определенные моменты времени. Как я понимаю- это относится к логике базы и не должно отделяться от нее.
...
Рейтинг: 0 / 0
20.06.2006, 15:00
    #33802839
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
совсем забыл, вызывать так
Код: plaintext
1.
select * from t1_agr('2006-06-01'::date);
...
Рейтинг: 0 / 0
20.06.2006, 15:06
    #33802878
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
postt.... сделать средствами Postgres автоматическое выполнение заданной процедуры в определенные моменты времени....
нельзя, помоему.
...
Рейтинг: 0 / 0
20.06.2006, 15:07
    #33802884
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
что-то я не понял тебе функция для отчета/показа информации нужна или для агрегирования?
...
Рейтинг: 0 / 0
20.06.2006, 15:11
    #33802904
postt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
Спасибо за ответы. Для чего нужно returns setof t1?
...
Рейтинг: 0 / 0
20.06.2006, 15:13
    #33802912
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
чтобы функция возвращала набор данных(несколько строк)
...
Рейтинг: 0 / 0
20.06.2006, 15:15
    #33802927
postt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
Суть в том,что есть одна таблица логов за каждый час и еще создается раз в сутки агрегированная таблица для ускорения работы. Но так как данные обновляются каждый час и нужна информация в реальном времени, отчет берется из двух таблиц (агрегированной и оставшаяся информация агрегируется из детальной таблицы).
...
Рейтинг: 0 / 0
20.06.2006, 15:26
    #33802984
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select sum(p1), p2, p3
  from t1
 where date_trunc('day', p3) = current_date /* данные за сегодняшний день */
 group by p2, p3
 union
select p1, p2, p3
  from t2
 where p3 > date_trunc('month', current_date) /* данные за текущий месяц */

что еще надо?
...
Рейтинг: 0 / 0
20.06.2006, 15:27
    #33802988
postt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
ZemAчтобы функция возвращала набор данных(несколько строк)
Данные же извлекаются из разных таблиц,а указана только одна t1. Буду разбираться. Есть ли инфа на русском по этому вопросу?
...
Рейтинг: 0 / 0
20.06.2006, 15:39
    #33803049
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
postt ZemAчтобы функция возвращала набор данных(несколько строк)
Данные же извлекаются из разных таблиц,а указана только одна t1. Буду разбираться. Есть ли инфа на русском по этому вопросу?
смотри внимательнее
Код: plaintext
1.
2.
3.
4.
select sum(p1), p2, p3
  from t1 /* T1 */
 where date_trunc('day', p3) = current_date /* данные за сегодняшний день */
 group by p2, p3
Код: plaintext
1.
 union
Код: plaintext
1.
2.
3.
select p1, p2, p3
  from t2 /* T2 */
 where p3 > date_trunc('month', current_date) /* данные за текущий месяц */

поищи в яндексе "Мартин Грубер Понимание SQL"
...
Рейтинг: 0 / 0
20.06.2006, 16:12
    #33803175
postt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
returns setof t1 as - я про это.
...
Рейтинг: 0 / 0
20.06.2006, 17:38
    #33803473
ZemA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура выборки из двух таблиц
вот так надо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create or replace function t1_agr()
  returns setof t2 as
'
select sum(p1), p2, date_trunc(''day'', p3)
  from t1
 where date_trunc(''day'', p3) = current_date
 group by p2, p3
 union
select p1, p2, p3
  from t2
 where p3 > date_trunc(''month'', current_date)
' language sql;
returns setof t2 as говорит о том что функция будет возвращать строки типа t2 , т.е. (p1 double, p2 int p3 date)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Процедура выборки из двух таблиц / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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