Комментарии 5
Спасибо за статью. Так как я не пишу SQL профессионально, но люблю порешать задачки и поучить новое, было интересно.
Самый правильный путь для импорта из CSV — воспользоваться оператором COPY. Но мы для разминки попробуем сделать это через регулярные выражения:
При попытке вставить данные с помощью COPY
может внезапно оказаться, что 01.01.2020
— это 1 января, а 02.01.2020
— это 1 февраля.
пруфы
date;client;balance
01.01.2020; Алиса;150
01.01.2020; Боб;100
02.01.2020; Алиса;100
02.01.2020; Боб;150
03.01.2020; Алиса;200
05.01.2020; Алиса;0
06.01.2020; Алиса;50
08.01.2020; Алиса;0
08.01.2020; Боб;200
09.01.2020; Алиса;0
09.01.2020; Боб;0
10.01.2020; Алиса;5
coalesce(lead(dt) OVER(PARTITION BY client ORDER BY dt), '2020-01-12') — dt days
Чтобы пересилить это дело, можно указать явно порядок (день-месяц-год) с помощью set datestyle to 'DMY'
(подробнее здесь). Однако так как в статье в разных местах используется разный формат данных ('02.01.2020' и '2020-01-12'), с этим тоже могут возникнуть проблемы.
LATERAL-подзапрос позволил нам вычислить дополнительное поле без лишнего прохода по выборке
в каком случае появился бы лишний проход? я так понимаю, выбор между later и повторить balance > 0
несколько раз в select-е
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
SQL HowTo: собираем «цепочки» с помощью window functions