powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите настроить фильтрацию по таблице
6 сообщений из 6, страница 1 из 1
Помогите настроить фильтрацию по таблице
    #39895250
Sadmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано:
Входной параметр @Date – дата без времени и
таблица tRate (котировки валют) с полями
Date_Time - Дата котировки (в формате дата + время)
Fund - Код валюты
Course - Котировка

Требуется написать select, который на указанную дату @Date будет выдавать для каждой валюты ее действующую котировку

Пример:

при наличии в таблице tRate данных

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Date_Time                     Fund               Course

20.05.2007 10:00              USD                 25.5

20.05.2007 10:00              EUR                 35.6

21.05.2007 10:00              USD                 25.4

21.05.2007 18:00              USD                 25.8

21.05.2007 10:00              UAH                 100.0

22.05.2007 10:00              UAH                 103.2

22.05.2007 10:00              USD                 26.0

22.05.2007 10:00              EUR                 35.4

При @Date = '21.05.2007’ select должен выдать результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
Валюта            Котировка

   USD              25.8

   EUR              35.6

   UAH              100.0

Решение с partition over:

SELECT DISTINCT Fund,
FIRST_VALUE(Course) OVER (PARTITION BY Fund
ORDER BY Date_Time DESC)
FROM Currency
WHERE Date_Time < DATEADD(day, 1, @Date)

Подскажите как обойтись без partition over в данной задаче. Спасибо!
...
Рейтинг: 0 / 0
Помогите настроить фильтрацию по таблице
    #39895253
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем не угодил partition over ?
...
Рейтинг: 0 / 0
Помогите настроить фильтрацию по таблице
    #39895256
Sadmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один из диалектов это не поддерживает
...
Рейтинг: 0 / 0
Помогите настроить фильтрацию по таблице
    #39895259
Remind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with cte as
(
  select fund, max(date_time) as MaxDateTime
  from Currency
  where date_time < dateadd(day, 1, @date)
  group by fund
)
select c.*
from Currency c
  join cte
    on cte.fund = c.fund
    and cte.MaxDateTime = c.date_time
...
Рейтинг: 0 / 0
Помогите настроить фильтрацию по таблице
    #39895260
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sadmann,

Тогда задайте вопрос в соответствующем разделе.
...
Рейтинг: 0 / 0
Помогите настроить фильтрацию по таблице
    #39895291
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sadmann,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
set language Russian;

declare @t table (Date_Time datetime, Fund varchar(10), Course numeric(18,2));

insert into @t
values
('20.05.2007 10:00', 'USD', 25.5),
('20.05.2007 10:00', 'EUR', 35.6),
('21.05.2007 10:00', 'USD', 25.4),
('21.05.2007 18:00', 'USD', 25.8),
('21.05.2007 10:00', 'UAH', 100.0),
('22.05.2007 10:00', 'UAH', 103.2),
('22.05.2007 10:00', 'USD', 26.0),
('22.05.2007 10:00', 'EUR', 35.4);

declare @date date = '20070521';

select
 a.*
from
 @t a
where
 a.Date_Time <= @date and
 not exists(select 1 from @t where Course = a.Course and a.Date_Time > a.Date_Time);
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите настроить фильтрацию по таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]