Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2012, 21:35   #1
Kekc13
Новичок
Джуниор
 
Регистрация: 24.02.2012
Сообщений: 2
По умолчанию Запрос!!!

Решение должно быть в виде текстового файла содержащего 1 запрос на SELECT

Существует таблица котировок финансовых инструментов:
Код:
CREATE TABLE dbo.rate (id int NOT NULL,
code varchar(50) NOT NULL,
date datetime NOT NULL,
value float NOT NULL)
Дата в поле date хранится без времени.
Записи в таблицу добавляются в день смены курса (не каждый день). Курс действует с даты установки по дату следующей
установки (не включительно):
Код:
insert into rate (id, code, date, value) values (1,'EUR','2009-06-05', 45.5)
insert into rate (id, code, date, value) values (2,'EUR','2009-06-15', 46.5)
insert into rate (id, code, date, value) values (3,'EUR','2009-06-17', 43.5)
insert into rate (id, code, date, value) values (4,'USD','2009-06-03', 25.5)
insert into rate (id, code, date, value) values (5,'USD','2009-06-11', 26.5)
insert into rate (id, code, date, value) values (6,'USD','2009-06-17', 23.5)
Рабочие дни перечислены в таблице:
Код:
CREATE TABLE dbo.infDays (dDay [datetime] NOT NULL)
insert into infDays (dDay) values ('2009-06-01')
insert into infDays (dDay) values ('2009-06-03')
insert into infDays (dDay) values ('2009-06-04')
insert into infDays (dDay) values ('2009-06-05')
insert into infDays (dDay) values ('2009-06-08')
insert into infDays (dDay) values ('2009-06-09')
insert into infDays (dDay) values ('2009-06-10')
insert into infDays (dDay) values ('2009-06-11')
insert into infDays (dDay) values ('2009-06-15')
insert into infDays (dDay) values ('2009-06-16')
insert into infDays (dDay) values ('2009-06-17')
insert into infDays (dDay) values ('2009-06-18')
insert into infDays (dDay) values ('2009-06-19')
insert into infDays (dDay) values ('2009-06-22')
insert into infDays (dDay) values ('2009-06-23')
insert into infDays (dDay) values ('2009-06-25')
Необходимо вывести значение курса по каждой валюте за каждый рабочий день (сортировка по валюте, дате):
code dDay value
-------- ----------------------- --------- -------
EUR 2009-06-05 00:00:00.000 45,5
EUR 2009-06-08 00:00:00.000 45,5
EUR 2009-06-09 00:00:00.000 45,5
EUR 2009-06-10 00:00:00.000 45,5
EUR 2009-06-11 00:00:00.000 45,5
EUR 2009-06-15 00:00:00.000 46,5
EUR 2009-06-16 00:00:00.000 46,5
EUR 2009-06-17 00:00:00.000 43,5
EUR 2009-06-18 00:00:00.000 43,5
EUR 2009-06-19 00:00:00.000 43,5
EUR 2009-06-22 00:00:00.000 43,5
EUR 2009-06-23 00:00:00.000 43,5
EUR 2009-06-25 00:00:00.000 43,5
USD 2009-06-03 00:00:00.000 25,5
USD 2009-06-04 00:00:00.000 25,5
USD 2009-06-05 00:00:00.000 25,5
USD 2009-06-08 00:00:00.000 25,5
USD 2009-06-09 00:00:00.000 25,5
USD 2009-06-10 00:00:00.000 25,5
USD 2009-06-11 00:00:00.000 26,5
USD 2009-06-15 00:00:00.000 26,5
USD 2009-06-16 00:00:00.000 26,5
USD 2009-06-17 00:00:00.000 23,5
USD 2009-06-18 00:00:00.000 23,5
USD 2009-06-19 00:00:00.000 23,5
USD 2009-06-22 00:00:00.000 23,5
USD 2009-06-23 00:00:00.000 23,5
USD 2009-06-25 00:00:00.000 23,5

Как такой запрос сделать??

Последний раз редактировалось Stilet; 24.02.2012 в 23:00.
Kekc13 вне форума Ответить с цитированием
Старый 25.02.2012, 12:13   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

За эту структуру данных можно было бы и руки поотбивать тому, кто её придумал
Код:
SELECT R.code,D.dDay,
    (SELECT TOP 1 R1.value FROM rate R1 WHERE R1.code=R.code AND R1.date<=D.dDay ORDER BY R1.date DESC) AS value
  FROM infDays D,(SELECT code FROM rate GROUP BY code) R
  ORDER BY R.code,D.dDay
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.02.2012, 12:34   #3
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
За эту структуру данных можно было бы и руки поотбивать тому, кто её придумал
Код:
SELECT R.code,D.dDay,
    (SELECT TOP 1 R1.value FROM rate R1 WHERE R1.code=R.code AND R1.date<=D.dDay ORDER BY R1.date DESC) AS value
  FROM infDays D,(SELECT code FROM rate GROUP BY code) R
  ORDER BY R.code,D.dDay
это похоже учебное задание.

А я понял так, что вложенных запросов нельзя использовать, голову поломал поломал, и плюнул))
vovk вне форума Ответить с цитированием
Старый 26.02.2012, 22:29   #4
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Пробуйте, проблем не должно быть
Цитата:
SELECT n.code, n.wDay, d.value
FROM rate d,
(SELECT b.code, c.dDay as wDay,
max(b.date) as maxdate
FROM rate b, infDays c
where b.date <= c.dDay
group by b.code, c.dDay) n
where
n.maxdate=d.date and
n.code=d.code
ReportCube вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос на выборку и отчет на этот запрос Camelot_2012 Microsoft Office Access 2 21.12.2011 16:48
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
ЗАПРОС! Best Programmist Microsoft Office Access 3 04.12.2009 20:58
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50