У меня есть таблица с данными следующим образом:Как выбрать первое значение, а затем игнорировать отдых?
id activity amount
1 unknown 20
2 storage 20
3 storage 20
4 swift 20
5 delivery 50
6 storage 20
Я хочу создать запрос, который дает мне «вычисленный» сумму. для примера выше .. желаемого результата:
id activity amount calculatedsum
1 unknown 20 0
2 storage 20 20
3 storage 20 20
4 swift 20 20
5 delivery 50 70 (had 20 and 50 arrived)
6 storage 20 70
логика проста .. найти первую строку, которая является «хранилищем», то есть calculatedsum
. когда встречается строка с «доставкой», добавьте ее, а это новый calculatedsum
.
Это то, что я пытался сделать:
select *,
sum(case when activity = 'Storage' then amount
when activity = 'delivery' then + amount
else 0
end) over (order by id)
from A
однако это не работает ...
, как я могу получить ожидаемый результат?
Edit: идентификатор является Колум, которая была создана: select row_number() over (order by .... nulls last) as id
таблица содержит результат запроса ... и eveytime запрос выполняется таблица сброшена на него ... так что идентификатор всегда фактическая строка номер.
Где 'swift' приходят из? –
Как вы получаете активность 'unknown' и' swift', когда вы не указали их на вход? Создайте [sqlfiddle] (http://sqlfiddle.com) с правильными данными – Utsav