Обновление SQL с использованием ЗАДЕРЖКИ

#sql #sql-update

#sql #sql-обновление

Вопрос:

Я пытаюсь обновить таблицу, которая выглядит так, как показано ниже. Я хочу, чтобы ColB обновлялся на 1, пока мы не дойдем до 3 (12-10-2020) .. затем обновите ColB на 3 до 12-15-2020. Я пытаюсь использовать лаг и слияние, но не могу получить доступ ко всем сразу. Придется запускать запрос много раз. Есть какие-нибудь подсказки здесь?? Пожалуйста, помогите. Большое вам спасибо!

 ColA         ColB     ColC         
12-1-2020    1         X  
12-2-2020    0
12-3-2020    0
12-4-2020    0
.
.
.12-10-2020  3         Y
.

.
12-15-2020    0
 

Комментарии:

1. Пометьте свой вопрос базой данных, которую вы используете.

Ответ №1:

Вы можете сгенерировать нужные данные, используя lag(ignore nulls) :

 select t.*,
       lag(case when colc is not null then colb end ignore nulls) over (order by cola)
from t;
 

Не все базы данных поддерживают эту стандартную конструкцию. Но вы можете использовать:

 select t.*, max(colb) over (partition by grp)
       lag(case when colc is not null then colb end ignore nulls) over (order by cola)
from (select t.*, 
             count(colc) over (order by cola) as grp
      from t
     ) t
 

То, как это включается в an update , зависит от базы данных, но вы можете легко вычислить значение на лету.

Комментарии:

1. Спасибо, Гордон. Я использую SQL DB. Не уверен, но SQL, похоже, не работает для меня. «count (colc) over (order by cola) as grp» дает мне случайные ответы

2. Я пытаюсь сделать это: с помощью cte_max как (выберите [fid], CDate,Ptype, max(случай, когда (Pcount не равен НУЛЮ), затем (Pcount end) поверх (разделение по [fid], CDate,Ptype, порядок по [fid], CDate,Ptype, ) cummcnt изct ) выберите * из cte_max в порядке [fid], CDate,Ptype

3. Пытаюсь выяснить, может ли Merge обновиться за один раз, используя приведенные выше SQL-запросы

4. @SA2020 . , , я не знаю, что означает «случайные ответы». В выражении нет ничего случайного. Вы должны пометить базу данных, которую вы используете. Также было бы полезно предоставить скрипку db / SQL.