2013-04-17 1 views
2

Позвольте мне объяснить, что я имею в виду, например:PostgreSQL есть способ средние результаты для ограниченного числа конечных результатов?

Я использую PostgreSQL версии 9.2.1

данных структурирована следующим образом:

(timedate)date   | (float) data | ... 
"2013-03-23 03:58:00-04" | 66819.59  | ... 
"2013-03-23 03:59:00-04" | 64277.22  | ... 
"2013-03-23 03:59:00-04" | 46841.75  | ... 
"2013-03-23 04:00:00-04" | 69697.38  | ... 
"2013-03-23 04:00:00-04" | 69452.69  | ... 
"2013-03-23 04:01:00-04" | 69697.47  | ... 

Моя таблица имеет более 5 миллионов точек данных , Я уже знаю, как захватывать данные в пределах диапазона даты начала и окончания.

Вот моя проблема: Когда диапазон слишком велик, скажите, что он пробегает по всем данным, он вернет все 5 миллионов строк, я хочу ОГРАНИЧИТЬ строки, которые он возвращает, не опуская никаких данных.

Например, если я хочу вернуть 5 строк, я хочу, чтобы первая строка представляла собой среднее значение данных первого миллиона строк. Вторые строки - средние данные второго миллиона строк и т. Д. (Очевидно, этот пример немного экстремален, и я просто преувеличиваю, чтобы попытаться передать то, что мне нужно сделать)

Благодарим за помощь и совет. !

ответ

1

Если вы хотите, средний день:

select 
    date_trunc('day', "date")::date "day", 
    avg("data") "data" 
from t 
group by 1 
order by 1 

Изменение 'day' для 'month' или 'week', как вам нравится.

http://www.postgresql.org/docs/current/interactive/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

Если вы действительно хотите, чтобы разделить данные на 5 кусков упорядоченных по дате:

select 
    floor(
     (row_number() over(order by "date"))::double precision 
     * 5 
     /(select count(*) from t) 
    ) chunk, 
    avg("data") "data" 
from t 
group by 1 
order by 1 
+0

Спасибо за быстрый ответ, вы должны извинить меня, я не являюсь экспертом в PostGreSQL. Не могли бы вы объяснить, что делает функция после функции date_trunc()? :: date "day" –

+0

@Philipp ':: date' выдает результат' date_trunc' с отметки времени до даты. '" day "- это псевдоним, присвоенный этому столбцу в результирующем наборе. –

Смежные вопросы