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

Откуда: Санкт-Петербург
Сообщений: 2
Есть 2 таблицы. В одной даты все подряд, в другой даты и курсы валют ЦБ без выходных дней. Надо сделать select который будет выводить все даты включая выходные и на выходные дни должен курс выводится такой же как и в пятницу последнюю.
27 янв 17, 00:09    [20151611]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume , пункты 4 и 6.
27 янв 17, 00:43    [20151648]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
aleks2
Guest
select d.Дата, dc.Курс
  from [даты все подряд] as d left outer join [даты и курсы валют ЦБ без выходных дней] as dc
        on iif( datepart(weekday, d.Дата ) not in (6,7) , d.Дата, dateadd(day, 5 - datepart(weekday, d.Дата ) - 1, d.Дата ) = dc.Дата 
27 янв 17, 06:17    [20151724]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
правильный проходящий.
Guest
aleks2,
ТС не совсем точно описывает задачу.
На самом деле речь не о пятнице (она всего лишь наиболее частый частный случай), а о последней из дат, предшествующих дате, на которую надо получить курс. Наистандартнейшая задача. Потому datepart() тут не совсем к месту.
27 янв 17, 09:13    [20151931]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
DDN
Есть 2 таблицы. В одной даты все подряд, в другой даты и курсы валют ЦБ без выходных дней. Надо сделать select который будет выводить все даты включая выходные и на выходные дни должен курс выводится такой же как и в пятницу последнюю.

для жизни нормально завести календарь с календарными и рабочими днями, ведь проблема будет в любой праздничный день
27 янв 17, 10:03    [20152100]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
правильный проходящий.
Guest
TaPaK
для жизни нормально завести календарь с календарными и рабочими днями, ведь проблема будет в любой праздничный день
В общем - да, для данной конкретной задачи - нафиг не сперся. Все давно уже придумано через коррелированный подзапрос. Кстати, очень редко, но таки бывали случаи, когда курс менялся не в рабочий день и даже не один раз в день. Так что календарь тут не особо поможет.
27 янв 17, 10:13    [20152147]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
правильный проходящий.
TaPaK
для жизни нормально завести календарь с календарными и рабочими днями, ведь проблема будет в любой праздничный день
В общем - да, для данной конкретной задачи - нафиг не сперся. Все давно уже придумано через коррелированный подзапрос. Кстати, очень редко, но таки бывали случаи, когда курс менялся не в рабочий день и даже не один раз в день. Так что календарь тут не особо поможет.
я не знаю случаев изменения курса регулятора когда он не работет :) без фантазий пжлст :)
27 янв 17, 10:14    [20152158]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
правильный проходящий.
TaPaK
для жизни нормально завести календарь с календарными и рабочими днями, ведь проблема будет в любой праздничный день
В общем - да, для данной конкретной задачи - нафиг не сперся. Все давно уже придумано через коррелированный подзапрос. Кстати, очень редко, но таки бывали случаи, когда курс менялся не в рабочий день и даже не один раз в день. Так что календарь тут не особо поможет.
ну и в дополнение ваш коррелированный подзапрос будет прекрасен когда надо будет пересчитать скажем средние остатки в эквиваленте скажем хоть за месяц хотя бы на 1кк счетов
27 янв 17, 10:17    [20152174]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
правильный проходящий.
Guest
TaPaK
ну и в дополнение ваш коррелированный подзапрос будет прекрасен когда надо будет пересчитать скажем средние остатки в эквиваленте скажем хоть за месяц хотя бы на 1кк счетов
1кк seek'ов на правильно организованных данных вполне прекрасны. :)
27 янв 17, 10:26    [20152230]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
правильный проходящий.
TaPaK
ну и в дополнение ваш коррелированный подзапрос будет прекрасен когда надо будет пересчитать скажем средние остатки в эквиваленте скажем хоть за месяц хотя бы на 1кк счетов
1кк seek'ов на правильно организованных данных вполне прекрасны. :)
это у вас судя по всему один день в месяце, ну ок
27 янв 17, 10:27    [20152234]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
правильный проходящий.
Guest
TaPaK
это у вас судя по всему один день в месяце, ну ок
Далеко не один. Просто курсы получаются вне зависимости от количества дней и счетов. А уж приджойнивание их к любому количеству дней и счетов - совершенно другая задача.
27 янв 17, 10:29    [20152245]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
правильный проходящий.,

автор
Просто курсы получаются вне зависимости от количества дней
действительно, зачем эти дни
27 янв 17, 10:32    [20152264]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
правильный проходящий.
Guest
TaPaK
правильный проходящий.,

автор
Просто курсы получаются вне зависимости от количества дней
действительно, зачем эти дни
Какие ЭТИ? Курсы получаются за диапазон дат. За год, даже високосный, если даже курс менялся бы каждый день по два раза это всего лишь 732 записи из двух полей. У вас вызывают большие сложности работа с такими большими таблицами?
27 янв 17, 10:37    [20152299]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
правильный проходящий.,

абстрагируясь от этого бреда. Вы правы
27 янв 17, 10:40    [20152335]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
aleks2
Guest
правильный проходящий.
aleks2,
ТС не совсем точно описывает задачу.
На самом деле речь не о пятнице (она всего лишь наиболее частый частный случай), а о последней из дат, предшествующих дате, на которую надо получить курс. Наистандартнейшая задача. Потому datepart() тут не совсем к месту.


1. Задачи надо решать в точном соответствии с постановкой.
2. Я то умею и "даты, предшествующие дате" добывать.
27 янв 17, 13:06    [20153029]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как сделать запрос?  [new]
правильный проходящий.
Guest
aleks2
1. Задачи надо решать в точном соответствии с постановкой.
Я всего лишь указал на некорректность постановки. Есть большие подозрения, что ТС пересказал ее своими словами и тем самым исказил условия задачи.
2. Я то умею и "даты, предшествующие дате" добывать.
О ваших умениях вроде и речи не было.
27 янв 17, 13:36    [20153207]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить