Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2010, 18:14   #1
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
Лампочка алгоритм с over () - м?

Добрый день.
есть две таблицы. графики выплат процентов и общего долга(кредиты).
их надо объединить по дате и номеру договора:
Код:
from CRDCONTRACTGRAPHIC2 g2
full join CRDCONTRACTGRAPHIC1 g1 on g1.CONTRACTID = g2.CONTRACTID and g1.dateout = g2.dateout
Также в g1 есть поле summa(сумма платежа). Нужно получить сумму всех совершенных платежей на каждую дату платежа(dateout).
Даты платежей этих таблиц объеденяются COALESCE(g1.dateout , g2.dateout) аналогично и номера договоров
Я решила эту задачу таким вот образом:
Код:
select  g2.dateout, 
sum(summa)
	over (partition by g2.CONTRACTID order by g2.dateout)
sum
from
CRDCONTRACTGRAPHIC2 g2
Но здесь только одна таблица. Нужно чтобы использовалось две. Причем если есть дата выплаты процентов и нет даты выплаты долга все равно должна быть сумма всех совершенных платежей долга до этой даты.
Пример:
------------------------------------
%% долг
g1.dateout g2.dateout summa sum COALESCE(g1.dateout , g2.dateout)
-----------------------------------------------------------------------
01.01.01___01.01.01 ___100___ 100___ 01.01.01
01.02.01____________________ 100___ 01.02.01
01.03.01___ 01.03.01___ 100 ___200___ 01.03.01
__________ 01.04.01___ 100___ 300___01.04.01
------------------------------------------------------------------------
Если что то непонятно объяснила спрашивайте...Буду признательна.
P.S. в таблицах более миллиона записей
Никому не поставить нас на колени! Мы лежали и будем лежать!

Последний раз редактировалось Rekky; 28.06.2010 в 18:18.
Rekky вне форума Ответить с цитированием
Старый 29.06.2010, 14:12   #2
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию

Может кому пригодится моё решение, возможно недоработанное..пока косяков не нашла)):
Код:
select
case
when g2.sum is not null then g2.sum
else case when lag(g2.sum) over (partition by COALESCE(g1.CONTRACTID , g2.CONTRACTID) order by COALESCE(g1.dateout, g2.dateout)) is null then 0
else lag(g2.sum) over (partition by COALESCE(g1.CONTRACTID , g2.CONTRACTID) order by COALESCE(g1.dateout, g2.dateout)) end
end sum
from
CRDCONTRACTGRAPHIC1 g1
full join (select g2.contractid,g2.dateout, g2.summa, 
sum(summa) over (partition by g2.CONTRACTID order by g2.dateout) sum
from CRDCONTRACTGRAPHIC2 g2 where g2.id2=0) g2
on g1.CONTRACTID = g2.CONTRACTID and g1.dateout = g2.dateout
where g1.id2=0 
order by COALESCE(g1.CONTRACTID , g2.CONTRACTID), COALESCE(g1.dateout, g2.dateout)
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм А* Claster Помощь студентам 1 24.05.2011 18:45
Волновой алгоритм (алгоритм Ли) MrRockchip Общие вопросы C/C++ 4 10.05.2010 13:26
алгоритм Apis Общие вопросы Delphi 1 26.04.2010 00:44
Алгоритм VladimirAleks Помощь студентам 2 29.10.2009 13:11
Алгоритм Artruman Общие вопросы Delphi 4 09.04.2009 00:59