Заполнение пустых строк набора данных с помощью LAG, OVER и неопределенного смещения? - PullRequest
0 голосов
/ 17 июня 2020

каждому. Впервые разместил здесь. Я искал какие-то липкие темы, которые могли бы сказать мне некоторую информацию «ЭТО СДЕЛАЙТЕ ЭТО ПЕРЕД ПЕРВЫМ РАЗМЕЩЕНИЕМ», но, возможно, я ее пропустил. Итак, вот вопрос:

Я работаю над созданием набора данных для анализа и пытаюсь заполнить некоторые пустые строки. Я не знаю, лучший ли это способ, но я думаю, что мне нужно ЗАСТАВИТЬ ОТ РАЗДЕЛА ПО этому набору данных. Вот пример таблицы:

Table of Customer Bids

Моя цель - заполнить все значения null в поле BidEnd с самой последней ячейкой над ней. Итак, все строки 1-4 будут заполнены 2020-01-03. Конечная цель - иметь возможность пометить все строки как действительные или нет. Если начало ставки произошло после ее окончания, она будет недействительной. Набор данных должен будет сделать это со всеми клиентами, а затем со всеми bid_id, сгруппированными под этим клиентом.

Я бы предпочел использовать код и реальный пример, но мне не разрешено делиться этой информацией, поэтому я постарался воссоздать сценарий как можно лучше. Извините, если это сбивает с толку.

1 Ответ

0 голосов
/ 17 июня 2020

В стандартном SQL вы должны использовать lag(ignore nulls):

select t.*,
       lag(bidend ignore nulls) over (partition by customer2 order by row)
from t;

Хотя стандартный SQL, не все базы данных поддерживают опцию ignore nulls в lag(). Вот почему тегирование вашей базы данных важно.

На самом деле, похоже, у вас есть одно значение на пару customer2 / bid_id. Если это правда, вы можете использовать max():

select t.*,
       max(bidend) over (partition by customer2, bid_id)
from t;
...