Как создать дополнительное поле в таблице SQL, которое указывает увеличение только на предыдущее максимальное значение - PullRequest
1 голос
/ 26 апреля 2019

Я использую существующую таблицу, которая содержит значения для элементов, значения которых меняются в определенные дни, либо увеличиваясь, либо уменьшаясь. Мне нужно суммировать значение на основе значения, увеличивающегося от предыдущего наибольшего значения, только если оно использует первое значение в качестве начального порога. Я пытался сделать это динамически.

Структура текущей таблицы как (A) Пытаясь достичь (B)

Current Table Structure - A Trying to Achieve - B

Я пытался использовать max () для раздела, чтобы пометить самое высокое значение, хотя, похоже, застрял в этой точке

SELECT a.Client_ID, a.Value_Amount_Change_Date, a.Value_Amount,
       (case when max(a.Value_Amount) over (partition by a.Client_ID) = Value
             then 1 else 0
        end) as Last_Highest_Value
FROM [Client_DB].[dbo].[Value_Tracking] a
WHERE a.Account_Num IN ('A1234', 'A6789')
GROUP BY a.Client_ID, a.Value_Amount_Change_Date, a.Value_Amount;

Ожидаемый набор результатов должен включать дополнительный столбец, в котором указывается только значение, основанное на увеличении предыдущего наибольшего значения, с использованием начального значения в качестве начального значения для сравнения с

1 Ответ

0 голосов
/ 26 апреля 2019

Вы можете использовать совокупный максимум, но вы хотите исключить значение текущей строки.Итак:

select a.*,
       (case when a > max(value) over (partition by clientid order by date rows between unbounded preceding and 1 preceding)
             then a - max(value) over (partition by clientid order by date rows between unbounded preceding and 1 preceding)
        end) as increment_over_running_max
from a;
...