Рассчитайте день окончания недели с помощью DATE_TRUNC в PostgreSQL - PullRequest
0 голосов
/ 11 октября 2019

Есть ли способ изменить дату показа на конец каждой недели вместо начала недели.

Вот мой код:

SELECT date_trunc('week', day + '1 day'::interval)::date - '1 day'::interval  AS anchor, AVG(value) AS average
FROM daily_metrics
WHERE metric = 'daily-active-users'
GROUP BY anchor
ORDER BY anchor

И результат такойниже: enter image description here

Чего я хочу добиться, так это сделать его 2018-03-03 (конец недели, определяемой пользователем) вместо 2018-02-25 (началоопределенной недели), 2018-03-10 вместо 2018-03-04 ...

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Ваш трюк с перемещением вперед-назад на один день прекрасно работает, чтобы начать вашу обычную неделю. Вы получаете конец или пользовательскую неделю (субботу), добавляя 5 вместо вычитания 1 :

SELECT date_trunc('week', day + interval '1 day')::date + 5 AS anchor ...

Добавление integer к date, означающие дни.

Связанный:

0 голосов
/ 11 октября 2019

Просто попробуйте

SELECT date_trunc('week', day::DATE + 1)::date + 5 AS anchor, AVG(value) AS average
FROM daily_metrics
WHERE metric = 'daily-active-users'
GROUP BY anchor
ORDER BY anchor

Когда дата является начальной датой недели, добавление 6 (1 + 5) дней переместит дату на последнюю дату недели. Добавление одного состоит в переносе воскресенья на следующую неделю, а 5 - в конец недели от даты начала.

Обратите внимание, PostgreSQL позволяет добавлять целые числа (= дни) к датам.

...