Как получить первый ряд недели для каждой недели - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть таблица, которая выглядит так

foo_date   | bar 
---------------
2018-01-01 | bar
2018-01-09 | bar
2018-01-10 | bar
2018-01-20 | bar

И я хотел бы создать запрос, который будет извлекать для каждой недели строку, которая появляется первой на этой неделе.

Приветствия

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы можете просто сделать:

select distinct on (datetrunc('week', foo_date)) t.*
from t
order by datetrunc('week', foo_date), foo_date;
0 голосов
/ 05 ноября 2018

демо: дб <> скрипка

SELECT DISTINCT ON (year, week)
    foodate, bar
FROM (
    SELECT
        foodate,
        bar,
        EXTRACT('isoyear' FROM foodate) as year,
        EXTRACT('week' FROM foodate) as week
    FROM dates
    ORDER BY foodate
)s

EXTRACT('week'...) дает неделю. Таким образом, две даты на одной и той же неделе дают одинаковые выходные данные в этом столбце.

DISTINCT ON (week) дает первую (заказанную!) Строку для каждой недели.

Функции Postgres Date

Обратите внимание на определение недели:

Номер недели нумерации ISO 8601 в году. От По определению, недели ISO начинаются по понедельникам и первой неделе года содержит 4 января того года. Другими словами, первый четверг год на первой неделе этого года.


Редактировать : Если у вас есть данные за более чем год, вы должны также добавить год. В противном случае, например, вы получите первый ряд всех первых недель всех лет.

...