Добавьте 0 в следующую строку столбца после последней точки данных

#sql #sql-server #datetime #sql-update

#sql #sql-сервер #дата и время #sql-обновление

Вопрос:

Я написал запрос, который выдает результат, как показано ниже:

 Date                           Amount
01-01-2020                          
01-02-2020                      10000
01-03-2020                      20000
01-04-2020                      30000
01-05-2020                      40000
01-06-2020                           
01-07-2020                           
01-08-2020                           
 

В приведенной выше таблице мы видим, что сумма равна нулю для 01-01-2020, 01-06-2020, 01-07-2020, 01-08-2020. Теперь я хочу добавить 0 в столбец суммы только для 1 строки, т.е. для даты — 01-06-2020, которая находится после последней точки данных — 40000. И я не уверен, как это сделать. Есть ли какой-либо прямой запрос для достижения этой цели? Спасибо.

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

1. Гарантируется ли, что все заполненные значения являются смежными? Если нет, обрабатывается ли каждая группа отдельно или это только самое последнее значение, которое вызывает ноль?

2. Значение 0 никоим образом не связано с приведенными выше числами. Я должен создать диаграмму с помощью этого вывода в другом приложении, и у меня должен быть один 0 после последней точки данных. (в нашем случае 0 после 40000)

3. Что, если у 01-07-2020 тоже были данные? Какие строки, если таковые имеются, вы хотели бы изменить?

Ответ №1:

Вы можете использовать lag() и case выражение:

 select date,
    case when amount is null and lag(amount) over(order by date) is not null 
        then 0
        else amount
    end as amount
from mytable
 

Если вам нужен update оператор:

 with cte as (
    select amount,
        case when amount is null and lag(amount) over(order by date) is not null 
            then 0
        end as new_amount
    from mytable
)
update cte set amount = new_amount where new_amount = 0
 

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

1. Я получаю сообщение «Оконные функции могут отображаться только в предложениях SELECT или ORDER BY», когда я использую приведенный выше код в инструкции update.

2. @BrawlX: Я обновил свой ответ update заявлением.

3. @BrawlX, пожалуйста, отметьте это как ответ. таким образом, это будет полезно для других в будущем