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

Откуда:
Сообщений: 142
Здравствуйте, уважаемые гуру !

Вопрос вот такой : мне нужно иметь возможность посчитать любую пару в основной валюте. Например, в рублях.

Но может оказаться так, что эта валюта в рублях не торгуется. Мало того, может оказаться и так, что там вообще сложная система :
Монгольские тугрики торгуются только за португальские песо, песо только за реалы, реалы только за пиастры, пиастры за ракушки, ракушки за ром, ром за баксы и только уже баксы за рубли. А цена мне нужна в рублях за тугрики !

Есть структура таблицы tblMain:

Id int
Price float
IdfFrst int
IdSecond int

Одну и только одну валютную пару пользователь может установить как isRoot, делается это в другой таблице tblDesc, со структурой :

IdDesc int
Desc varchar(20)
isRoot bit

Понятное дело, что нужно перебором искать валютные пары до тех пор, пока я не найду в таблице любую пару, у которой idSecond будет равна рублям. И через курсор сделать такое можно. Но можно ли сделать этот расчет без курсора, если заранее неизвестно, сколько именно валютных пар придется перебрать ?
3 июл 17, 06:42    [20607803]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Добрый Э - Эх
Guest
ElenaTomsk,

почитать про recursive cte.
при грамотном подходе оно позволяет совершить обход практически любого графа.
а уж строгое иерархическое дерево - так вообще без проблем.
3 июл 17, 07:31    [20607825]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
aleks2
Guest
Добрый Э - Эх
ElenaTomsk,

почитать про recursive cte.
при грамотном подходе оно позволяет совершить обход практически любого графа.
а уж строгое иерархическое дерево - так вообще без проблем.

Бред.

Если ужо очень надо - генерируем ВСЕ пары... один раз. Причем, тупым INSERT в цикле.
И радуемся жизни.
3 июл 17, 09:19    [20607937]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
aleks2
Guest
Самое веселье начнется когда путь в графе неоднозначен.
3 июл 17, 09:21    [20607942]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Добрый Э - Эх
Guest
aleks2,

кто бы сомневался... твоего амебочного мозга только на эту фразу и хватает. хоть бы оригинальность проявлял и внес малую толику разнообразия в свой однотипный ответ. а то уже читать скучно, ибо - предсказуемо.
3 июл 17, 09:23    [20607950]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Добрый Э - Эх
Guest
aleks2
Самое веселье начнется когда путь в графе неоднозначен.
если ты не умеешь обработать цикл в графе - это не проблема графа. идиоты и молотком, бывает, умудряются не только пальцы себе отбить, но и голову. это не повод равняться на них или запрещать молоток для использования
3 июл 17, 09:25    [20607952]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
aleks2,

кто бы сомневался... твоего амебочного мозга только на эту фразу и хватает. хоть бы оригинальность проявлял и внес малую толику разнообразия в свой однотипный ответ. а то уже читать скучно, ибо - предсказуемо.
это было про бред. просто пока отвечал - ты успел сделать второй высер. но оно и понятно - любой понос, в том числе и словесный, сдерживать трудно
3 июл 17, 09:26    [20607955]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Считать курс каждый раз на лету это медленно и затратно, соглашусь что стоит рассчитывать все курсы всех валют и хранить. курсы меняются - считать и хранить, тогда и проблем с выяснением значений пары на конкретное время не будет вызывать стресс :)
3 июл 17, 09:46    [20608007]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
aleks2
Guest
Добрый Э - Эх
aleks2,

кто бы сомневался... твоего амебочного мозга только на эту фразу и хватает. хоть бы оригинальность проявлял и внес малую толику разнообразия в свой однотипный ответ. а то уже читать скучно, ибо - предсказуемо.

Эка у него припекло.
Расслабься.
3 июл 17, 09:49    [20608013]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
https://stackoverflow.com/questions/7259829/building-a-hierarchical-tree-with-a-single-sql-query
3 июл 17, 10:12    [20608078]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
ElenaTomsk
Member

Откуда:
Сообщений: 142
TaPaK
Считать курс каждый раз на лету это медленно и затратно, соглашусь что стоит рассчитывать все курсы всех валют и хранить. курсы меняются - считать и хранить, тогда и проблем с выяснением значений пары на конкретное время не будет вызывать стресс :)


А чем быстрей быть считать все курсы ? Это же будет тот же самый перебор, но только пересчет всего во всё займет еще больше времение ?
3 июл 17, 11:47    [20608400]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
ElenaTomsk
TaPaK
Считать курс каждый раз на лету это медленно и затратно, соглашусь что стоит рассчитывать все курсы всех валют и хранить. курсы меняются - считать и хранить, тогда и проблем с выяснением значений пары на конкретное время не будет вызывать стресс :)


А чем быстрей быть считать все курсы ? Это же будет тот же самый перебор, но только пересчет всего во всё займет еще больше времение ?

тем что курсы не меняются каждую секунду
3 июл 17, 12:00    [20608459]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
А не лучше один раз "размотать" всё дерево в иерарихию
https://docs.microsoft.com/en-us/sql/t-sql/data-types/hierarchyid-data-type-method-reference

а потом поддерживать его уже в хорошем виде?
3 июл 17, 12:03    [20608466]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Если посчитать из рублей сразу доллары и по цепочке рубль - евро - доллар,
то получится всегда одно и то же, да? Я вот что-то сомневаюсь...
Так что aleks2 прав - намечается неоднозначность в расчётах
3 июл 17, 12:14    [20608512]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
TaPaK
ElenaTomsk
пропущено...


А чем быстрей быть считать все курсы ? Это же будет тот же самый перебор, но только пересчет всего во всё займет еще больше времение ?

тем что курсы не меняются каждую секунду

А вот это ты высокочастотным трейдерам расскажи. Поржут, скажут, "ну да, каждую микросекунду".
3 июл 17, 12:15    [20608516]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Руслан Дамирович
TaPaK
пропущено...

тем что курсы не меняются каждую секунду

А вот это ты высокочастотным трейдерам расскажи. Поржут, скажут, "ну да, каждую микросекунду".

а давайте любую вашу фантазию лепить к вопросу
3 июл 17, 12:17    [20608524]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
iap
Если посчитать из рублей сразу доллары и по цепочке рубль - евро - доллар,
то получится всегда одно и то же, да? Я вот что-то сомневаюсь...
Так что aleks2 прав - намечается неоднозначность в расчётах

Ну построить "дорогу" - все возможные сочетания пар валют с учетом исходной задачи - recursive cte.
А дальше каждый раз выбирать "оптимальный" курс (например, при продаже подороже, при покупке подешевле).
3 июл 17, 12:20    [20608534]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Добрый Э - Эх
Guest
Руслан Дамирович
iap
Если посчитать из рублей сразу доллары и по цепочке рубль - евро - доллар,
то получится всегда одно и то же, да? Я вот что-то сомневаюсь...
Так что aleks2 прав - намечается неоднозначность в расчётах

Ну построить "дорогу" - все возможные сочетания пар валют с учетом исходной задачи - recursive cte.
А дальше каждый раз выбирать "оптимальный" курс (например, при продаже подороже, при покупке подешевле).


сейчас и тебе ответят:
aleks2
Бред.

Если ужо очень надо - генерируем ВСЕ пары... один раз. Причем, тупым INSERT в цикле.
И радуемся жизни.
3 июл 17, 12:35    [20608592]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Добрый Э - Эх
сейчас и тебе ответят:
aleks2
Бред.

Если ужо очень надо - генерируем ВСЕ пары... один раз. Причем, тупым INSERT в цикле.
И радуемся жизни.

Так я-то предлагаю не тупым INSERT, а умным CTE
3 июл 17, 12:39    [20608603]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Валюты конвертируют через валюту-посредника.
3 июл 17, 12:50    [20608633]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30768
Владислав Колосов
Валюты конвертируют через валюту-посредника.
+1
Нужно не обходить графы, а назначить валюту посредник.
Это будет и оптимальнее для запросов, и, главное, правильно в бизнес-модели, потому что автоматически найдётся множество путей с одинаковой длинной, и непонятно, какой выбрать.
3 июл 17, 12:54    [20608650]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Более того, там же может быть разная бизнес задача.

Очевидно что у нас есть "цена" конвертации, и может быть "цена" за операцию.

И в одном случае нам надо пройтись по графу подешевле, а в другом подороже.

Примеров масса, например пейпал, который по-умолчанию делал двойную конвертацию, вместо того, чтоб считать в валюте счета.
3 июл 17, 12:56    [20608657]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
aleks2
Guest
alexeyvg
Владислав Колосов
Валюты конвертируют через валюту-посредника.
+1
Нужно не обходить графы, а назначить валюту посредник.
Это будет и оптимальнее для запросов, и, главное, правильно в бизнес-модели, потому что автоматически найдётся множество путей с одинаковой длинной, и непонятно, какой выбрать.


Скажи проще: надо СНАЧАЛА посчитать, с песнями, плясками, выбором "кратчайшего пути" и битьем в бубен...
Но надо просто и тупо посчитать ВСЕ нужные курсы.
3 июл 17, 13:23    [20608774]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
ElenaTomsk
Member

Откуда:
Сообщений: 142
alexeyvg
Владислав Колосов
Валюты конвертируют через валюту-посредника.
+1
Нужно не обходить графы, а назначить валюту посредник.
Это будет и оптимальнее для запросов, и, главное, правильно в бизнес-модели, потому что автоматически найдётся множество путей с одинаковой длинной, и непонятно, какой выбрать.


Коллеги, я что-то запуталась уже. Зачем нужна валюта посредник, если все равно может оказаться так, что в ней сделки не проводятся ? Я же пример привела, каждая сделка там уникальна, вот не хотят тугрики продавать за доллары . А искусственно назначать валюту посредник и пересчитывать в нее, так задача не отличается в итоге от "пересчитать в валюту с признаком isRoot"
3 июл 17, 13:44    [20608874]     Ответить | Цитировать Сообщить модератору
 Re: Расчет валютных пар в один select?  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2169
ElenaTomsk
alexeyvg
пропущено...
+1
Нужно не обходить графы, а назначить валюту посредник.
Это будет и оптимальнее для запросов, и, главное, правильно в бизнес-модели, потому что автоматически найдётся множество путей с одинаковой длинной, и непонятно, какой выбрать.


Коллеги, я что-то запуталась уже. Зачем нужна валюта посредник, если все равно может оказаться так, что в ней сделки не проводятся ? Я же пример привела, каждая сделка там уникальна, вот не хотят тугрики продавать за доллары . А искусственно назначать валюту посредник и пересчитывать в нее, так задача не отличается в итоге от "пересчитать в валюту с признаком isRoot"

Очень сомнительно, что бизнес задача состоит в покупке / продаже валюты.
Скорее, речь идет о некоей торговой площадке, валюты операций на которой для покупателей и продавцов часто не совпадают, но надо показать сумму операции в "родной" валюте (букинг так делает).

И в этом случае введение валюты посредника резко упрощает задачу и делает результаты расчетов более предсказуемыми.
Выбирается валюта посредник или основная валюта (например USD).
При вводе каждой новой валюты указываем (человек указывает) как именно пересчитывать из данной валюты в основную валюту.
В результате пересчеты работают очень просто. У нас есть валюта исходная и целевая. И есть сумма в исходной валюте. Выполняем два преобразования по жестким правилам (из валюты источника в основную валюту и из основной валюты в целевую валюту) - и цель достигнута.
3 июл 17, 13:53    [20608937]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить