Как сгруппировать и выбрать данные на основе столбца даты и времени за 10-минутный период? - PullRequest
0 голосов
/ 01 апреля 2020

Как группировать и выбирать данные на основе столбца даты и времени за 10-минутный период?

Выбрать:

SELECT *
FROM tbl
WHERE datecollect IN (
SELECT generate_series(
        (SELECT min(date_trunc('minute', datecollect)) FROM tbl), 
        (SELECT max(date_trunc('minute', datecollect)) FROM tbl), 
        '10 minute'::interval));

Таблица :

CREATE TABLE tbl (
  valuex varchar,
  datecollect timestamp);

INSERT INTO tbl (valuex,datecollect) VALUES ('teste','2020-02-25 01:00:41');
INSERT INTO tbl (valuex,datecollect) VALUES ('teste','2020-02-25 01:05:36');
INSERT INTO tbl (valuex,datecollect) VALUES ('teste','2020-02-25 01:10:41');
INSERT INTO tbl (valuex,datecollect) VALUES ('teste','2020-02-25 01:15:11');
INSERT INTO tbl (valuex,datecollect) VALUES ('teste','2020-02-25 03:00:11');
INSERT INTO tbl (valuex,datecollect) VALUES ('teste','2020-02-25 03:05:41');
INSERT INTO tbl (valuex,datecollect) VALUES ('teste','2020-02-25 03:10:11');
INSERT INTO tbl (valuex,datecollect) VALUES ('teste','2020-02-25 03:15:11');

SQL ПРОСМОТР

Выход:

0 records

1 Ответ

1 голос
/ 01 апреля 2020

Вам нужно JOIN сгенерированный вами сериал до tbl, где datecollect находится в 10-минутном интервале, начиная со времени в сериале. Это даст вам все строки за заданный интервал; затем вы можете агрегировать по мере необходимости, группируя по pstart. Если вы хотите получить 0 значений, если для интервала нет совпадающих значений, используйте вместо этого LEFT JOIN.

SELECT *
FROM (
  SELECT generate_series(
            MIN(date_trunc('minute', datecollect)), 
            MAX(date_trunc('minute', datecollect)), 
            '10 minute'::interval
         ) AS pstart
  FROM tbl
) dt
JOIN tbl ON tbl.datecollect > dt.pstart AND tbl.datecollect < dt.pstart + interval '10 minute'

Выход (для ваших данных выборки):

pstart                  valuex  datecollect
2020-02-25T01:00:00Z    teste   2020-02-25T01:00:41Z
2020-02-25T01:00:00Z    teste   2020-02-25T01:05:36Z
2020-02-25T01:10:00Z    teste   2020-02-25T01:10:41Z
2020-02-25T01:10:00Z    teste   2020-02-25T01:15:11Z
2020-02-25T03:00:00Z    teste   2020-02-25T03:00:11Z
2020-02-25T03:00:00Z    teste   2020-02-25T03:05:41Z
2020-02-25T03:10:00Z    teste   2020-02-25T03:10:11Z
2020-02-25T03:10:00Z    teste   2020-02-25T03:15:11Z

Демонстрация по SQLFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...