Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как посчитать разницу в курсах на заданную дату.  [new]
ola_ya_22
Member

Откуда:
Сообщений: 251
на ms sql server на дату 22.05.2012 есть курс доллара.
также там есть те же данные на 21.05.2012.
как посчитать изменение курса?
дата курс доллар изменение
21.05.2012 29,4502

дата курс доллар изменение
22.05.2012 29,4101 -0,0401

поле изменение должно быть вычисляемым полем.
22 май 12, 10:13    [12592394]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
is_me
Member

Откуда: Нижний Новгород
Сообщений: 165
ola_ya_22
на ms sql server на дату 22.05.2012 есть курс доллара.
также там есть те же данные на 21.05.2012.
как посчитать изменение курса?
дата курс доллар изменение
21.05.2012 29,4502

дата курс доллар изменение
22.05.2012 29,4101 -0,0401

поле изменение должно быть вычисляемым полем.


А что будет в самой первой строчке таблицы?
Насколько мне известно, вычисляемые поля работают в пределах строки.
Можно попробовать триггером.
22 май 12, 10:17    [12592409]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
ola_ya_22,
cte ->Row_number по дате -> cte-left join cte по вычисленному номеру.
22 май 12, 10:38    [12592497]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
is_me
Member

Откуда: Нижний Новгород
Сообщений: 165
alter table tCourse
(
  CourseID int primary key identity (100000,1)
 ,Course numeric(10,2)
 ,Date smalldatetime
 ,Change numeric(10,2)
)

insert into tCourse (Course,Date,Change)
values (30.01, '2012-20-05',0)
select * from tCourse

alter trigger tr_cch on tCourse
instead of insert
as
begin
   declare @m numeric(10,2)
   set @m = (select Course from tCourse where CourseID = (select max(CourseID) from tCourse))
   insert tCourse
   select ii.Course
         ,ii.Date 
         ,ii.Course - @m as Course
   from inserted ii 
end

--insert into tCourse (Course,Date,Change)
--values (30.10, '2012-20-05',0)

select * from tCourse

--100001	30.01	2012-05-20 00:00:00	0.00
--100002	30.01	2012-05-20 00:00:00	0.00
--100003	30.05	2012-05-20 00:00:00	0.04
--100004	30.01	2012-05-20 00:00:00	-0.04
--100005	30.01	2012-05-20 00:00:00	0.00
--100006	30.10	2012-05-20 00:00:00	0.09
22 май 12, 10:41    [12592524]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
ola_ya_22,можно типа такого
+

declare @t table
  (
    dt date
  , rate decimal(10, 2)
  )
insert  into @t
        ( dt, rate )
values  ( '20120101', 100.5 )
,       ( '20120102', 101.01 )
,       ( '20120104', 105.34 )
,       ( '20120106', 100.33 )

declare @dt_from date = '20120103'
declare @dt_curr date = '20120105' ;
with  zz
        as ( select top ( 1 )
                    t.dt
                  , t.rate rate_cur
                  , z.rate as rate_from
             from   @t t
             cross apply ( select top ( 1 )
                                  z.rate
                           from   @t z
                           where  z.dt <= @dt_from
                           order by z.dt desc
                         ) z
             where  t.dt <= @dt_curr
             order by t.dt desc
           )
  select  zz.dt as OnDate
        , zz.rate_cur 
        , zz.rate_from
        , zz.rate_cur - zz.rate_from as rate_diff
  from    zz

22 май 12, 10:45    [12592548]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
aleks2
Guest
Редкостная тупость советов.

1. Бесполезно, что-то считать "на ходу". Это долго и непродуктивно.
2. Продуктивно ПРОНУМЕРОВАТЬ последовательно значения курса и поддерживать эту нумерацию непрерывной при изменениях.
3. После чего фсе становится тривиальным.
22 май 12, 10:54    [12592623]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
aleks2
Редкостная тупость советов.

2. Продуктивно ПРОНУМЕРОВАТЬ последовательно значения курса и поддерживать эту нумерацию непрерывной при изменениях.

В постановке небыло разьяснений насчет возможности применять DDL. А так конечно хорошо иметь последовательную нумерацию .
22 май 12, 10:59    [12592665]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Мистер Хенки,
;with NumeredTable(dt,rate,rn)
as(
select
	dt
	,rate
	,ROW_NUMBER() over(order by dt asc)
from	@t	)

select 
	nt.dt
	,nt.rate
	,DIFF = isNull(nt.rate-nt2.rate,0)
from	NumeredTable nt
		left join	NumeredTable nt2
		on	nt2.rn+1 = nt.rn	
		
22 май 12, 11:00    [12592669]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
ola_ya_22
Member

Откуда:
Сообщений: 251
спасибо, за предыдущие советы. Сейчас пробовать буду))))
не подскажете какие-нибудь способы как с минимальными затратами можно закачивать данные с сайта http://oilworld.ru/news.php?view=232249 (нужны цифры по маслам) в таблицу на сервере?
22 май 12, 11:04    [12592702]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
aleks2,
автор
Редкостная тупость советов.
ниочем.
автор
1. Бесполезно, что-то считать "на ходу". Это долго и непродуктивно.

Это смотря как будет использоваться,если 100500 раз в минуту будет вызываться, то да наверно лучше сразу обсчитать.
Если 100 в день,то и обсчета на лету хватит(за год 365 записей,за 10 лет 3650 записей соотв. любой сервер обсчитает чихнуть не успеешь),тем более если меняется курс в течении дня.
Если вдруг нужна разница не только между соседними датами,то заранее обсчитывать смысла вообще нет.
автор
3. После чего фсе становится тривиальным.
Чтогде было нетривиально?
22 май 12, 11:19    [12592882]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
ola_ya_22
спасибо, за предыдущие советы. Сейчас пробовать буду))))
не подскажете какие-нибудь способы как с минимальными затратами можно закачивать данные с сайта http://oilworld.ru/news.php?view=232249 (нужны цифры по маслам) в таблицу на сервере?
Парсить HTML. Получать данные и закачивать в таблицу...
22 май 12, 11:31    [12592998]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
aleks2
Редкостная тупость советов.

1. Бесполезно, что-то считать "на ходу". Это долго и непродуктивно.
2. Продуктивно ПРОНУМЕРОВАТЬ последовательно значения курса и поддерживать эту нумерацию непрерывной при изменениях.
3. После чего фсе становится тривиальным.

ля-ля-ля....
Если эта разница курсов нужна нам раз в сутки, или вообще раз в год к годовому отчету? А еще впридачу бывает так, что за какой-то день курсик забыли прогрузить, и загрузили только через месяц (или год). Что будет быстрее проще и надежнее?
22 май 12, 11:46    [12593176]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
is_me
Member

Откуда: Нижний Новгород
Сообщений: 165
aleks2
Редкостная тупость советов.

1. Бесполезно, что-то считать "на ходу". Это долго и непродуктивно.
2. Продуктивно ПРОНУМЕРОВАТЬ последовательно значения курса и поддерживать эту нумерацию непрерывной при изменениях.
3. После чего фсе становится тривиальным.

Советы напрямую соответствуют поставленному вопросу.
А то, что у каждого программиста своя голова и каждый пытается решить проблему своим способом (и желательно переписать все с нуля) - тык это уже давно известный факт, с которым может справиться только руководитель программистов. :-(
22 май 12, 12:01    [12593321]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
ola_ya_22
Member

Откуда:
Сообщений: 251
Владимир СА, а можно поподробнее?
22 май 12, 13:14    [12594024]     Ответить | Цитировать Сообщить модератору
 Re: как посчитать разницу в курсах на заданную дату.  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
ola_ya_22
Владимир СА, а можно поподробнее?
Сначала надо изучить DOM (Document Object Model). Ну и там сориентируешься... Ну и этот вопрос скорее всего в ветку HTML, JavaScript, VBScript, CSS.
Посмотри тут DOM: работа с HTML-страницей для начала... интернет рулит...
22 май 12, 13:24    [12594140]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить