Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

Удаление дубля из выборки

$
0
0
Здравствуйте ! Появилась задача по работе сделать отчет по вкладам, запросы и таблицы какие надо дернул в режиме дебага софта.
Запрос почти готов, но вот незадача, если договор продлялся, то по этому запросу будет выдано 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.

Viewing all articles
Browse latest Browse all 7251

Trending Articles