powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / реализация справочника с историей значений за периоды
10 сообщений из 10, страница 1 из 1
реализация справочника с историей значений за периоды
    #32041103
oleg_rost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MS-SQL Server 2000.
Проблема с реализацией запроса из справочника следующей структуры:
- ID - (идентификатор)
- Pr(1)...Pr(n) - набор полей признаков
- Value - значение
- DT_Reg (дата актуальности значения)

Запрос на одно актуальное значение у меня выглядит так:

SELECT TOP 1 Value FROM <Reference> WHERE (Pr(1)=x(n))AND...AND(Pr(n)=x(n)) ORDER BY DT_Reg DESC.

Реально ли при такой структуре справочника получить список актуальных значений на определенную дату не по одному, а по нескольким значения одним запросом? Мне пришлось писать Stored Procedure с временной таблицей.
...
Рейтинг: 0 / 0
реализация справочника с историей значений за периоды
    #32041107
Alexandr Kapustin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разве что только с подзапросом
SELECT Value FROM <Reference> WHERE (Pr(1)=x(n))AND...AND(Pr(n)=x(n)) and DT_Reg =
(select max(DT_Reg) FROM <Reference> WHERE (Pr(1)=x(n))AND...AND(Pr(n)=x(n)))

ну и варинат подзапроса, если нужен диапазон...

другой вопрос - производительность...
...
Рейтинг: 0 / 0
реализация справочника с историей значений за периоды
    #32041114
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реально.
Хочешь - пиши на мыло.
...
Рейтинг: 0 / 0
реализация справочника с историей значений за периоды
    #32041147
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я это сделал бы через две вьюхи.

Код: plaintext
1.
2.
create view v1 as
select Pr( 1 ),...,Pr(N),max(DT_Reg) from <Reference> 
group by Pr( 1 ),...,Pr(N)

и

Код: plaintext
1.
2.
3.
4.
5.
create view v2 as
select <Reference>.*  from <Reference> 
inner join v1 on <Reference>.Dt_Reg=v1.DT_Reg
and v1.Pr( 1 )=<Reference>.Pr( 1 ) 
...
and v1.Pr(N)=<Reference>.Pr(N) 

Но вопрос производительности остается: такие вьюхи нельзя индексировать.
...
Рейтинг: 0 / 0
реализация справочника с историей значений за периоды
    #32041158
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача выборки сильно упрощается если хранить не дату актуальности, а период актуальности, т.е. две даты
...
Рейтинг: 0 / 0
реализация справочника с историей значений за периоды
    #32041183
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2SergSuper
>>Задача выборки сильно упрощается если хранить не дату актуальности, а период актуальности, т.е. две даты

.. и усложняется задача проверки дипазонов (периодов)
8)

2VVG_
А можно одним запросом
...
Рейтинг: 0 / 0
реализация справочника с историей значений за периоды
    #32041190
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и одним, но для вьюхи оптимизатор хотя бы помнит план выполнения.
...
Рейтинг: 0 / 0
реализация справочника с историей значений за периоды
    #32041219
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только это плохо, а не хорошо.
...
Рейтинг: 0 / 0
реализация справочника с историей значений за периоды
    #32041244
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в основном нужны актуальные значения и редко нужны остальные, то имеет смысл завести отдельную таблицу для последних актуальных значений....
...
Рейтинг: 0 / 0
реализация справочника с историей значений за периоды
    #32041427
Michael Hopgarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / реализация справочника с историей значений за периоды
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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