Анимация от начальной до конечной точки для каждой & ldquo; группы & rdquo;

Если каждый 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);
1
задан Z.Lin 6 March 2019 в 05:09
поделиться

1 ответ

Вы можете настроить код ниже, чтобы увидеть, соответствует ли он вашим потребностям.

В целях демонстрации я использовал только первые 10 индексов событий, применил разные цвета для каждого индекса и & amp; замедлили анимацию, чтобы лучше проиллюстрировать два сценария:

  1. одна и та же точка перемещается из положения A в положение B (в пределах одного и того же индекса события);
  2. различные точки исчезают / появляются (переход между индексами событий).

Не стесняйтесь удалять цветовое отображение и ускорить анимацию для вашего фактического использования.

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) 

result

0
ответ дан Z.Lin 6 March 2019 в 05:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: