Если каждый n_paiment
имеет только одно значение, то вы можете использовать простые функции окна:
with toupdate as (
select t.*,
max(montant_dernier_paiment) over (partition by n_paiement) as max_mdp
from t
)
update toupdate
set montant_dernier_paiment = max_mdp
where montant_dernier_paiment <> max_mdp or (montant_dernier_paiment is null and max_mdp is not null);
Если вышеуказанное неверно, то что вы, что эквивалентно lag(ignore nulls)
. SQL Server не поддерживает это, но вы можете использовать first_value()
:
with toupdate as (
select t.*,
max(montant_dernier_paiment) over (partition by n_paiement) as max_mdp,
first_value(montant_dernier_paiment) over
(partition by n_paiement
order by (case when montant_dernier_paiment is null then 1 else 2 end) desc,
tri desc
) as prev_mdp
from t
)
update toupdate
set montant_dernier_paiment = prev_mdp
where montant_dernier_paiment <> prev_mdp or (montant_dernier_paiment is null and prev_mdp is not null);
Вы можете также рассказать это, используя apply
:
update t
set montant_dernier_paiment = t2.montant_dernier_paiment
from t cross apply
(select top (1) t.*
from t t2
where t2.n_paiement = t.n_paiement and
t2.tri < t.tri and
t2.montant_dernier_paiment is not null
order by t2.tri desc
) t2
where t.montant_dernier_paiment <> t2.montant_dernier_paiment or (t.montant_dernier_paiment is null and t2.montant_dernier_paiment is not null);
Вы можете настроить код ниже, чтобы увидеть, соответствует ли он вашим потребностям.
В целях демонстрации я использовал только первые 10 индексов событий, применил разные цвета для каждого индекса и & amp; замедлили анимацию, чтобы лучше проиллюстрировать два сценария:
Не стесняйтесь удалять цветовое отображение и ускорить анимацию для вашего фактического использования.
p <- df %>%
filter(event_index <= 10) %>%
mutate(state = seq(1, n())) %>%
ggplot(aes(x = coords_x, y = coords_y, group = event_index,
colour = factor(event_index))) +
geom_point(size = 5) +
scale_colour_brewer(palette = "Paired") +
transition_states(state, transition_length = 3, wrap = FALSE) +
# fade in for each point associated with a new event_index
enter_fade() +
# cubic for smoother transition between states within each event_index
ease_aes('cubic-in-out') +
# fade out for each point associated with an old event_index
exit_fade() +
# add title to keep track of states
labs(title = "State: {closest_state}")
# more frames at a slower fps (defaults are 100 / 10) to observe transitions better
animate(p, nframes = 200, fps = 5)