У меня есть простой sql-скрипт mySQL, который выводит мне количество строк с течением времени для конкретной таблицы (на основе поля даты и времени в таблице)
SELECT concat('M-', s.label)
, s.cnt
, @tot := @tot + s.cnt AS running_subtotal
FROM ( SELECT DATE_FORMAT(t.created,'%y-%m') AS `label`
, COUNT(t.id) AS cnt
FROM `templates` t
GROUP BY `label`
ORDER BY `label`
) s
CROSS
JOIN ( SELECT @tot := 0 ) i
Теперь я хочу перенести это в PostgreSQL, но понятия не имею, как перенести переменные в синтаксис на основе pg.
Внутреннее утверждение, конечно, не проблема:
SELECT TO_CHAR(t.created,'YYYY-MM') AS label
, COUNT(t.id) AS cnt
FROM templates t
GROUP BY label
ORDER BY label
Кто-нибудь здесь, кто может помочь мне с переменной частью?
Вот простая таблица с данными:
create TABLE "templates" (
"id" bigserial,
"title" varchar(2048) default NULL::character varying,
"created" timestamp,
PRIMARY KEY ("id")
);
insert into templates(title, created) values('test', '2011-03-01');
insert into templates(title, created) values('test 2', '2011-03-02');
insert into templates(title, created) values('test 3', '2011-03-03');
insert into templates(title, created) values('test 4', '2011-03-04');
insert into templates(title, created) values('test 5', '2011-03-05');
insert into templates(title, created) values('test 6', '2011-04-01');
insert into templates(title, created) values('test 7', '2011-04-02');
insert into templates(title, created) values('test 8', '2011-04-03');
insert into templates(title, created) values('test 9', '2011-04-04');
insert into templates(title, created) values('test 10', '2011-04-05');
… // 300 more for 2011-05
пример вывода этого запроса (на основе записей со столбцом «создано»):
M-11-03: 5 5 M-11-04: 5 10 (5 + 5) M-11-05: 300 310 (5 + 5 + 300)
(Это побочный продукт табличной статистики (также известной как количество строк) с течением времени а>)