Re: 'GROUP BY' problem

Поиск
Список
Период
Сортировка
От Peter Gibbs
Тема Re: 'GROUP BY' problem
Дата
Msg-id 009501c2c84d$84b9c7c0$0b01010a@emkel.co.za
обсуждение исходный текст
Ответ на 'GROUP BY' problem  (Mariusz Czułada <manieq@idea.net.pl>)
Список pgsql-general
Mariusz Czulada wrote:

> I'd love to do it this way:
>
> SELECT
> date_trunc('15 minutes',ts),
> min(cpu_busy_pct),
> avg(cpu_busy_pct),
> max(cpu_busy_pct)
> FROM
> tmp_server_perf_sum
> GROUP BY
> date_trunc('15 minutes',ts);

The best I can think of at the moment is:
SELECT

(trunc(date_part('epoch',ts::timestamptz)/900)*900)::int::abstime::timestamp
,
  min(cpu_busy_pct),
  avg(cpu_busy_pct),
  max(cpu_busy_pct)
FROM tmp_server_perf_sum
GROUP BY 1;

i.e. convert to seconds since epoch, truncate to 900 seconds = 15 minutes,
and convert
back to a timestamp.

You could wrap this in a function such as:

create function trunc_quarter_hour(timestamptz) returns timestamp
 language plpgsql immutable strict
 as '
  begin
    return (trunc(date_part(''epoch'',$1)/900)*900)::int::abstime;
  end
 ';

and then use:
SELECT trunc_quarter_hour(ts), <etc>

This would allow you to substitute a better calculation into the function
without
changing your queries.

--
Peter Gibbs
EmKel Systems


В списке pgsql-general по дате отправления:

Предыдущее
От: Manfred Koizar
Дата:
Сообщение: Re: mass import to table with unique index
Следующее
От: Eric Cholet
Дата:
Сообщение: Re: index on timestamp performance