我在postgres中有此代码,我尝试获取一段时间内行的计数(以几周为间隔),然后每周在列中进行转换。
DO $$
DECLARE rec record;
DECLARE str text;
begin
str := '"estado" text,';
FOR rec IN SELECT generate_series('2019-01-28 18:00:43.738-06', '2019-12-06 18:00:43.738-06', interval '1 week') as start_time
LOOP
str := str || '"' || rec.start_time || '" int' ||',';
END LOOP;
str:= substring(str, 0, length(str));
prepare query as SELECT * FROM crosstab('WITH grid AS (
SELECT start_time, lead(start_time, 1, ''infinity'') OVER (ORDER BY start_time) AS end_time
FROM (
SELECT generate_series(''2019-01-28 18:00:43.738-06'', ''2019-12-06 18:00:43.738-06'', interval ''1 week'') AS start_time
FROM servicios
) sub
) SELECT su.estado, count(e.creado) AS events, g.start_time
FROM grid g
LEFT JOIN servicios e ON e.creado >= g.start_time AND e.creado < g.end_time
inner join sucursales as su on e.fksucursal = su.pk
where e.borrado = false
group by su.estado ')AS final_result(str);
EXECUTE 'query';
end $$
ERROR: a column definition list is required for functions returning "record"
LINE 1: prepare query as SELECT * FROM crosstab('WITH grid AS (
我有下一个
start date|estado | events |
2019-01-28|Mexico City| 6 |
2019-02-04|Mexico City| 4 |
2019-02-11|Mexico City| 3 |
2019-02-18|Mexico City| 5 |
2019-01-28|New York | 4 |
2019-02-04|New York | 2 |
2019-02-11|New York | 8 |
2019-02-18|New Yor | 2 |
我需要下一个
estado | 2019-01-28| 2019-02-04| 2019-02-11| 2019-02-18| .....
Mexico City| 6 | 4 | 3 | 5 | .....
New York | 4 | 2 | 8 | 2 | .....
Moscu | 5 | 9 | 6 | 1 | .....