Выборка по дате с разграничением интервалов по времени

Подскажите пожалуйста, как можно вывести результат в одну строку, чтобы скажем был следующий вид


общее количество посещ / 00-01/01-02/02-03/.../23-00
1000 / 100 / 800 /100 /.../0

Данные берутся из одной таблицы, в которой один из столбцов время. Может это и не правильно, но по скорости сбора данных - равных нету. А теперь для создания аналитических данных (для графиков и т.д.) понадобилось точно разбить по временным интервалам и желательно чтобы каждый день был в новой строке.

Т.е. надо вычислять значения от условий, как лучше это сделать?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

с трудом понял,

с трудом понял, что вы имеете в виду... (может пагубное влияние понедельника)

CREATE AGGREGATE array_accum(text) (
    SFUNC = array_append,
    STYPE = text[],
    INITCOND = '{}'
);
 
SELECT s_date,array_to_string(array_accum(h::text),'/'), 
   array_to_string(array_accum(co::text),'/')
FROM
(SELECT s_date,EXTRACT(hour FROM s_time) AS h,
   count(*) AS co
FROM foo f
GROUP BY s_date,h
ORDER BY s_date,h) t
GROUP BY s_date

более наглядно на мой взгляд так:

SELECT * FROM crosstab(
'select s_date, EXTRACT(hour from u.s_time) as h, count(*) as co
from userw u
group by s_date,h
order by s_date,h',
'select h from generate_series(0,23) h')
AS (s_date date,h0 int,
h1 int,h2 int,h3 int,h4 int,h5 int,h6 int,
h7 int,h8 int,h9 int,h10 int,h11 int,h12 int,
h13 int,h14 int,h15 int,h16 int,h17 int,h18 int,
h19 int,h20 int,h21 int,h22 int,h23 int)

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023