ГРУППА ПО ДНЯМ, но для указанной c отметки времени - PullRequest
0 голосов
/ 27 мая 2020

Я хочу сгруппировать по дням, но время не должно быть с 00:00:00 до 23:59:59. Оно должно быть с 22:00:00 (предыдущий день) до 21:59:59 (текущий день)

У меня есть запрос:

SELECT
    DATE_TRUNC('day',"timecolumn") "DATE",
    COUNT(*) 
FROM "schemaname"."tablename"
WHERE
    TO_CHAR("timecolumn",'YYYYMMDD') BETWEEN '20200301' AND '20200307'
GROUP BY "DATE";

Это дает мне количество разделенных на 7 дней.

Но эти данные рассчитываются следующим образом:

2020-03-01 00:00:00 to 2020-03-01 23:59:59
2020-03-02 00:00:00 to 2020-03-02 23:59:59
2020-03-03 00:00:00 to 2020-03-03 23:59:59
2020-03-04 00:00:00 to 2020-03-04 23:59:59
2020-03-05 00:00:00 to 2020-03-05 23:59:59
2020-03-06 00:00:00 to 2020-03-06 23:59:59
2020-03-07 00:00:00 to 2020-03-07 23:59:59

Принимая во внимание, что мне нужно разделить данные, как показано ниже:

2020-02-29 22:00:00 to 2020-03-01 21:59:59
2020-03-01 22:00:00 to 2020-03-02 21:59:59
2020-03-02 22:00:00 to 2020-03-03 21:59:59
2020-03-03 22:00:00 to 2020-03-04 21:59:59
2020-03-04 22:00:00 to 2020-03-05 21:59:59
2020-03-05 22:00:00 to 2020-03-06 21:59:59
2020-03-06 22:00:00 to 2020-03-07 21:59:59

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Угадайте, что .... Сработало как шарм :) :) :) Большое спасибо @Slava Rozhnev

Я немного изменил ваш запрос .. PSB

SELECT 
    DATE_TRUNC('day',"timecolumn" at time zone 'utc' at time zone 'sast') "DATE",
    COUNT(*) 
FROM "schemaname"."tablename"
     WHERE TO_CHAR("timecolumn" at time zone 'utc' at time zone 'sast', 'YYYYMMDD') BETWEEN '20200521' AND '20200526'
GROUP BY "DATE";
0 голосов
/ 27 мая 2020

Если я вас правильно понял, timecolumn - столбец datetime, значение которого хранится в часовом поясе UT C. Для расчета желаемых результатов вы должны применить свой часовой пояс раньше (например, 'europe / rome'):

SELECT
    DATE_TRUNC('day', "timecolumn") "DATE",
    "timecolumn" at time zone 'utc' at time zone 'europe/rome',
    COUNT(*) 
FROM "schemaname"."tablename"
WHERE
    TO_CHAR(
        "timecolumn" at time zone 'utc' at time zone 'europe/rome',
        'YYYYMMDD'
    ) BETWEEN '20200301' AND '20200307'
GROUP BY "DATE";

Посмотрите разные часовые пояса здесь .

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