WedX - журнал о программировании и компьютерных науках

PostgreSQL: количество строк с течением времени

У меня есть простой 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)

(Это побочный продукт табличной статистики (также известной как количество строк) с течением времени)



Ответы:



2

Для форматирования даты вы можете использовать M-YY-MM в качестве строки форматирования, чтобы получить, например: M-11-03. И с помощью объединения count с оконной функцией< /а>:

SELECT distinct TO_CHAR(created,'M-YY-MM'), 
       COUNT(id) OVER ( ORDER BY TO_CHAR(created,'YY-MM')) 
FROM templates 
ORDER BY 1

SQL FIDDLE

25.08.2015
  • @a_horse_with_no_name посмотрите на этот SQLFIDDLE, чтобы увидеть результат без distinct 25.08.2015
  • действительно хороший код! но я не уверен, как получить второй столбец (скользящий итог). мне нужно сделать соединение с суммой (count_field) OVER ( ORDER BY date_field))? 26.08.2015
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]