Здравствуйте ! Появилась задача по работе сделать отчет по вкладам, запросы и таблицы какие надо дернул в режиме дебага софта.
Запрос почти готов, но вот незадача, если договор продлялся, то по этому запросу будет выдано 2 одинаковых договора, с разной датой открытия и закрытия. При этом необходимо чтоб договор выводился только один, но при этом дата открытия должна быть у более старого.
С датой открытия решил, но теперь не могу сообразить, как сделать чтоб у меня в выборку попал лишь один договор. С этим прошу помощи, заранее спасибо.
В колонку lol записал дату открытия вклада которая мне необходима, в колонке opendate дата открытия вклада и дата его как бы "переоткрытия" при пролонгации.
На рисунке результат запроса. Отметил красным дубли по номеру договора и их даты, получается дубль с более старой датой мне надо исключить, при этом более старую дату открытия мне необходимо будет указать в оставшейся строке, что я сделал в поле lol.
Запрос почти готов, но вот незадача, если договор продлялся, то по этому запросу будет выдано 2 одинаковых договора, с разной датой открытия и закрытия. При этом необходимо чтоб договор выводился только один, но при этом дата открытия должна быть у более старого.
С датой открытия решил, но теперь не могу сообразить, как сделать чтоб у меня в выборку попал лишь один договор. С этим прошу помощи, заранее спасибо.
В колонку lol записал дату открытия вклада которая мне необходима, в колонке opendate дата открытия вклада и дата его как бы "переоткрытия" при пролонгации.
select cu.Number as Valuta, Prolong = case when (ROW_NUMBER() OVER(PARTITION BY d.number ORDER BY d.dealdate ASC)) > 1 then (select min(fixdate) from tdeal where d.Number = Number) else 0 end, lol = case when (ROW_NUMBER() OVER(PARTITION BY d.number ORDER BY d.dealdate ASC)) > 1 then (select min(dealdate) from tdeal where d.Number = Number) else 0 end, inst.Name+' '+inst.Name1+' '+inst.Name2 as Name, tal.BriefAccount as AccNumber, d.dealdate as Opendate, d.fixdate as CloseDate, round(rl.Rest * sign(rl.Rest),2) as Rest, round(rl.RestBs * sign(rl.RestBs),2) as RestBs, d.course as Stavka, isnull(d.RegistPayType, 0) as SrokVklada, isnull(d.Number, isnull(d.Number, '')) as dlDealNumber, i.Brief as InstrumentBrief, NesnOstVal = case when cu.Number = '840' then case when ltrim(rtrim(ul.Vid)) = 'ТвНаграда' then ul.Qty*@usd else ul.NesnOstVal*@usd end when cu.Number = '978' then case when ltrim(rtrim(ul.Vid)) = 'ТвНаграда' then ul.Qty*@eur else ul.NesnOstVal*@eur end when cu.Number = '810' then case when ltrim(rtrim(ul.Vid)) = 'ТвНаграда' then ul.Qty else ul.NesnOstVal end else case when ltrim(rtrim(ul.Vid)) = 'ТвНаграда' then ul.Qty else ul.NesnOstVal end end, NesnOst = case when ltrim(rtrim(ul.Vid)) = 'ТвНаграда' then ul.FirstQtyRur else ul.NesnOst end from tDPTAccountLink tal WITH (NOLOCK index=XIE1tDPTAccountLink) inner join tDPT_RuleAcc_Sync il WITH (NOLOCK index=XPKtDPT_RuleAcc_Sync) on tal.RuleAccID = il.RuleAccID and il.ObjectType = 1 inner join tDPT_FinOper_Sync i WITH (NOLOCK index=XPKtDPT_FinOper_Sync) on i.FinOperID = il.ObjectID left outer join tDeal d WITH (NOLOCK index=XPKtDeal) on d.DealID = tal.ObjectID and d.InstrumentID = il.ObjectID left join tInstitution inst on d.InstitutionID = inst.InstitutionID left join tDPT_Currency_Sync cu WITH (NOLOCK index=XPKtDPT_Currency_Sync) on cu.CurrencyID = d.FundID left join pResList rl WITH (NOLOCK index=XPKpResList) on rl.SPID = @@SPID left join tResource r WITH (NOLOCK index=XPKtResource) on r.ResourceID = rl.ResourceID left join tCurrency c WITH (NOLOCK index=XPKtCurrency) on c.CurrencyID = r.FundID left join tUser WITH (NOLOCK index=XAK0tUser) on tUser.Brief = convert(char(30),suser_sname()) left join #result ul on ul.Number = d.Number /*left join tDeal d1 WITH (NOLOCK index=XPKtDeal) on d1.dealdate > d.dealdate and d.number =d1.number*/ where RL.SPID = @@SPID and tal.AccountID = RL.ResourceID and ul.brief != 'NULL' and il.Brief='Депозит' and d.fixdate >= '20161014'
На рисунке результат запроса. Отметил красным дубли по номеру договора и их даты, получается дубль с более старой датой мне надо исключить, при этом более старую дату открытия мне необходимо будет указать в оставшейся строке, что я сделал в поле lol.