Здравствуйте, знатоки sql (sybase)
Подскажите пожалуйста, у меня есть 3 кейса. Пример:
Дата 1 кейс 2 кейс 3 кейс
1/01 43 3 40
2/01 0 0 40
3/01 3 51 0
Мне надо получить такой результат, как выше.
Данные уже есть в таблице. 3 кейс это результат вычитания 2 от 1 кейса. Нужно чтобы если второй кейс был по значению больше 3 (разницы вычитания), то выводился 0 (null), а если 3 кейс больше второго, то выводился результат и тянулся вниз на другие даты до тех пор, пока значение во втором кейсе не будет больше этого результата (3 кейса).
Сейчас оно просто вычитает построчно, не знаю как перебросить на след строку результат, ибо версия сайбейса старая и очень ограниченна в возможностях.
Выложите не вот это непойми что, а нормально форматированные: исходные данные в виде CREATE TABLE + INSERT INTO (5-7 записей), требуемый конечный результат для этих данных, подробные пояснения по каждому посчитанному значению.
тебе не подойдет lag? оно какраз возвращает предыдущее значение из текущего запроса, а иначе придется самопересечение делать хитрое (что то типа max(id) where id < current_id)
вообще лично я, если вижу задачи на 'порядок' в sql, стараюсь вынести это из базы данных, так как там начинаются проблемы, которые вытекают либо в ну очень корявый код либо высокие затраты ресурсов (излишние сортировки например)
Используйте хранимую процедуру (так как у SYBASE нет оконных функций) с курсором. Для использования результатов вычисления в следующей строке, храните его в отдельной переменной.