Я использую Vertica, что, к сожалению, не позволяет мне использовать CROSS APPLY. И, видимо, в Vertica нет такой вещи, как CTE.еще одна дата пробел-заполнить SQL-загадка
Вот что я получил:
t:
day | id | metric | d_metric
-----------+----+--------+----------
2011-12-01 | 1 | 10 | 10
2011-12-03 | 1 | 12 | 2
2011-12-04 | 1 | 15 | 3
Обратите внимание, что в первый день, дельта равна значению метрики. Я хотел бы, чтобы заполнить пробелы, например:
t_fill:
day | id | metric | d_metric
-----------+----+--------+----------
2011-12-01 | 1 | 10 | 10
2011-12-02 | 1 | 10 | 0 -- a delta of 0
2011-12-03 | 1 | 12 | 2
2011-12-04 | 1 | 15 | 3
Я придумал способ сделать это изо дня в день, но я бы очень хотел, это решение, которое работает на одном дыхании ,
Я думаю, что я мог бы получить что-то работающее с LAST_VALUE, но я не могу придумать правильные операторы JOIN, которые позволят мне правильно разбить и упорядочить каждую историю каждого дня.
редактировать: предположить, у меня есть таблица вроде этого:
calendar:
day
------------
2011-01-01
2011-01-02
...
, которые могут быть связаны с соединениями. Мое намерение состояло бы в том, чтобы поддерживать диапазон дат в календаре в соответствии с диапазоном дат в t.
редактировать: Еще несколько заметок о том, что я ищу, просто чтобы быть конкретным:
При генерации t_fill, я хотел бы, чтобы точно покрыть диапазон дат в т, а а также любые даты, отсутствующие между ними. Так что правильный t_fill начнется в тот же день и конец с той же даты, что и t. t_fill имеет два свойства:
1) один раз на некоторую дату появляется идентификатор, он всегда будет иметь строку для каждого последующего дня. Это заполнение пробелов, подразумеваемое в исходном вопросе.
2) не должны ни в одной строке для идентификатора когда-нибудь появится снова после того, как какой-то даты, то t_fill раствор должен весело генерировать строки с одной и той же значение метрики (и 0 дельта) с даты, что в последние данные указывают до конца дата t.
Решение может задерживать более ранние даты до начала диапазона дат в t. То есть для любого идентификатора, который появляется после первой даты в t, строки между первой датой в t и первая дата для идентификатора будут заполнены метрикой = 0 и d_metric = 0. Я не предпочитаю такого решения, так как он имеет более высокий коэффициент роста для каждого идентификатора, который входит в систему. Но я мог бы легко справиться с этим, выбрав в новую таблицу только строки, где metric! = 0 и d_metric! = 0.
Я ничего не знаю о Vertica, но, как говорится на [их сайте] (http://www.vertica.com/the-analytics-platform/advanced-in-database-analytics/), * «Некоторые из Vertica Advanced Возможности Google Analytics включают: заполнение основного зазора, ... '*. Итак, если бы я был вами, я, вероятно, должен был начать расследование в этом направлении. –
Мы пробовали свои функции GFI в прошлом, но у этого есть очень специфический склон, который не устраивает наши потребности здесь. – kimbo305
Что конкретно не соответствует вашим потребностям? Кажется, что заполнение пробелов с постоянной интерполяцией было бы способом пойти. – geoffrobinson