Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

Обещал разместить здесь предсобеседовательную задачку   Найти похожие ветки 

 
stone ©   (2006-03-29 11:29) [80]


> Paul_K ©   (29.03.06 11:09) [79]
>
> а решение то верное?

было
INSERT INTO #tRate
(SecurityTicker, TradeSystem, RateDate, Course)
SELECT
"EESR", "MMVB", "2005-12-30", 1

в #report
30/12/05 EESR RTS NULL

дальше не смотрел


 
Paul_K ©   (2006-03-29 11:53) [81]

мдя.. слона я не заметил...
надо так ограничение по датам написать было
and tx.RateDate < dateadd(dd,1,@rep_date)

Но присмотрелся к условию
нашел ещё багов:)
у меня оказывается ещё и только ММВБ котировки вылезут к какому-то моменту гы:)
Кстати отсюда вопрос по условию
на дату 2006-01-08 имеем
4 LKOH MMVB 2006-01-04 00:00:00 4.0
9 LKOH RTS 2006-01-07 00:00:00 9.0
что должно быть в ответе? ммвб?  ртс?


 
stone ©   (2006-03-29 13:19) [82]


> что должно быть в ответе? ммвб?  ртс?


> Если котировка на дату Т отсутствует, берется котировка
> с максимальной датой, не превышающей Т.

Значит 8-го будет РТС, а уже 9-го "LKOH", "MMVB", "2006-01-09", 10
Думаю так, но лучше уточнить у Nikolay M. ©


 
Paul_K ©   (2006-03-29 14:52) [83]

хмм.. не совсем так вроде
я уже понял
7-го, 8-го и далее - РТС пока ММВБ не появится.. от так..


 
Paul_K ©   (2006-03-29 15:18) [84]

от так вроде верно....
begin tran
declare @start_date DATETIME,
       @end_date DATETIME,
       @rep_date DATETIME,
       @rate_place varchar(255),
@stock_name  varchar(255),  
@rate_value  Float

set @start_date =convert(datetime,isnull(convert(varchar,@StartDate,3),"0/0/1900"),3)
set @end_date = convert(datetime,isnull(convert(varchar,dateadd(dd,1,@FinishDate),3),"0/0/1900"),3)
set @rep_date=@start_date
while @rep_date<@end_date
begin

insert into #report (date_r,stock_name,rate_place,rate_value)
select distinct  @rep_date,SecurityTicker,null,null
from #tRate
set @rep_date = dateadd(dd,1,@rep_date)
end
declare bla cursor for select date_r,stock_name from #report
open bla
fetch bla into @rep_date,@stock_name
while @@fetch_status=0
begin
     select @rate_place=null, @rate_value=null
      if exists (select 1 from #tRate where RateDate=@rep_date and SecurityTicker=@stock_name having count(*)>1)
       select @rate_place=TradeSystem, @rate_value=Course
         from #tRate
        where RateDate = @rep_date
                 and SecurityTicker=@stock_name
                 and  TradeSystem="MMVB"
      else    
 select top 1 @rate_place=TradeSystem, @rate_value=Course
          from #tRate
                where SecurityTicker=@stock_name
                  and RateDate <= @rep_date
                  and RateDate >= @start_date
         order by RateDate desc
      --select @rep_date,@rate_place,@rate_value,@stock_name
      update  #report
         set  rate_place=@rate_place,
              rate_value=@rate_value
       where  date_r=@rep_date
         and  stock_name=@stock_name
fetch bla into @rep_date,@stock_name
end
close bla

deallocate  bla

commit tran

select convert(varchar,date_r,3),stock_name,rate_place,rate_value   from #report
order by stock_name,date_r

drop table #report

select * from #tRate order by RateDate
drop table #tRate

rep_date                       stock_name rate_place rate_value                                            
------------------------------ ---------- ---------- -----------------------------------------------------
29/12/05                       EESR       NULL       NULL
30/12/05                       EESR       MMVB       1.0
31/12/05                       EESR       MMVB       1.0
01/01/06                       EESR       MMVB       1.0
02/01/06                       EESR       RTS        5.0
03/01/06                       EESR       MMVB       2.0
04/01/06                       EESR       MMVB       2.0
05/01/06                       EESR       MMVB       2.0
06/01/06                       EESR       MMVB       2.0
07/01/06                       EESR       MMVB       2.0
08/01/06                       EESR       MMVB       2.0
09/01/06                       EESR       MMVB       2.0
10/01/06                       EESR       MMVB       2.0
29/12/05                       LKOH       NULL       NULL
30/12/05                       LKOH       NULL       NULL
31/12/05                       LKOH       NULL       NULL
01/01/06                       LKOH       RTS        8.0
02/01/06                       LKOH       MMVB       3.0
03/01/06                       LKOH       MMVB       3.0
04/01/06                       LKOH       MMVB       4.0
05/01/06                       LKOH       MMVB       4.0
06/01/06                       LKOH       MMVB       4.0
07/01/06                       LKOH       RTS        9.0
08/01/06                       LKOH       RTS        9.0
09/01/06                       LKOH       MMVB       10.0
10/01/06                       LKOH       MMVB       10.0


 
Nikolay M. ©   (2006-03-29 15:21) [85]

Виноват, прошу прощения, по работе отвлекали :)
Отвечаю.


> Кстати отсюда вопрос по условию
> на дату 2006-01-08 имеем
> 4 LKOH MMVB 2006-01-04 00:00:00 4.0
> 9 LKOH RTS 2006-01-07 00:00:00 9.0
> что должно быть в ответе? ммвб?  ртс?


На 2006-01-08 будет РТС-ная котировка, значение 9.


 
Paul_K ©   (2006-03-29 15:24) [86]

да у меня уже прошел приступ тупизма:)
проверь кстати тормознутое мое последнее решение. Опять я налажал ?


 
Nikolay M. ©   (2006-03-29 15:27) [87]


> Paul_K ©   (29.03.06 15:18) [84]


Да, такой вариант совпадает с stone ©   (28.03.06 16:55) [36], а у него, если я ничего не упустил, все правильно.

А ты всегда так курсоры обзываешь? :)


 
Paul_K ©   (2006-03-29 15:34) [88]

нет только когда они меня достают?)
а вот вопрос следующий. Быстродействие я не того не анализировал. встает вопрос какой вариантов быстрее и почему?
есть подозрение что мой медленнее. из-за курсора ..


 
Nikolay M. ©   (2006-03-29 15:48) [89]


> Быстродействие я не того не анализировал. встает вопрос
> какой вариантов быстрее и почему?


Я сейчас загружен по самые ушки, надеюсь, в вых напишу свой вариант, набросаю скрипт для заполнения таблицы котировок и сравню твой вариант, stone и свой (если он будет). Результаты и скрипт для прогона теста выложу.
Твой курсор, да еще в транзакции, скорее всего будет не самым быстрым - под транзакцию тоже ресурсы требуются.


 
Paul_K ©   (2006-03-29 15:56) [90]

Твой курсор, да еще в транзакции,
хе а ты вне транзакции курсор запустить попробуй в кверианалайзере.. Я не осилил
если это процедурой оформлять то естессено надо транзакцию убирать



Страницы: 1 2 3 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.045 c
4-1139054418
MyCola
2006-02-04 15:00
2006.04.23
Сигнализация для мышки и клавы


10-1117455549
mozart
2005-05-30 16:19
2006.04.23
Работа в Ворд


2-1144566772
hgd
2006-04-09 11:12
2006.04.23
Graphics 32


8-1132575902
wicked
2005-11-21 15:25
2006.04.23
кватернионы и преобразования...


15-1144042450
Ega23
2006-04-03 09:34
2006.04.23
С Днём рождения! 2 апреля