У меня есть таблица, которая хранит данные за год до даты один раз на каждого клиента в день. Схема упрощена выглядит примерно так, назового этой история таблицы ::Как создать недельную метрику в Vertica?
bus_date | client_id | ytd_costs
Я хотел бы создать представление, которое добавляет неделю до текущей даты расходов, по существу, любой цена, которая происходит после предварительной пятницы будет считаться частью недели. В настоящее время у меня есть следующее, но я обеспокоен логикой коммутатора.
Вот пример логики, которую я имею прямо сейчас, чтобы показать, что это работает. Я также получил использовать предложение TimeSeries, который я никогда не использовал раньше ...
;with history as (
select bus_date,client_id,ts_first_Value(value,'linear') "ytd_costs"
from (select {ts'2016-10-07'} t,1 client_id,5.0 "value" union all select {ts'2016-10-14'},1, 15) k
timeseries bus_Date as '1 day' over (partition by client_id order by t)
)
,history_with_wtd as (select bus_date
,client_id
,ytd_costs
,ytd_costs - decode(
dayofweek(bus_date)
,6,first_value(ytd_costs) over (partition by client_id order by bus_date range '1 week' preceding)
,first_value(ytd_costs) over (partition by client_id,date_trunc('week',bus_date+3) order by bus_date)
) as "wtd_costs"
,ytd_costs - 5 "expected_wtd"
from history)
select *
from history_with_wtd
where date_trunc('week',bus_date) = '2016-10-10'
В сервере Sql, я мог бы просто использовать функцию задержки, так как я могу передать переменную в пункте вид возврата , но в Vertica такой вариант не существует.
Не дает правильного результата, так как ytd_cost является совокупным значением. Таким образом, если моя стоимость в пятницу была 5 долларов, а в понедельник я понес дополнительные расходы в размере 10 долларов, моя стоимость составит 15 долларов. Во вторник, если я не получу никаких дополнительных сборов, это будет еще 15 долларов. –
Итак, стоимость первого дня (суббота) будет суббота минус пятница? – woot
Так что бы это было не так, как раньше, за исключением того, что он использует 'first_value' и вычитает его из' ytd_costs'? Я буду обновлять запрос для этой версии. – woot