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

Откуда:
Сообщений: 743
Модератор: тема перенесена из раздела "проектирование"

имеется таблица

Версии (Id, ДатаВерсии,...)

и подчиненная ей таблица

Значения (Id, Link_Версия, ИмяПеременной, Значение_Переменной_В_Этой_Версии)

Необходимо узнать (за минимальное число обращений к БД)

список актуальных значений всех переменных на указанную дату.

Сообщение было отредактировано: 29 май 09, 16:57
28 май 09, 23:32    [7242147]     Ответить | Цитировать Сообщить модератору
 Re: Хранение истории версий значений  [new]
АнатоЛой
Member

Откуда: Киев, Украина
Сообщений: 2897
Блог
jbond81

за минимальное число обращений к БД

Это дааа.... Сами придумали или преподаватель так задачу ставил?
29 май 09, 00:24    [7242237]     Ответить | Цитировать Сообщить модератору
 Re: Хранение истории версий значений  [new]
АнатоЛой
Member

Откуда: Киев, Украина
Сообщений: 2897
Блог
jbond81, с приоритетами определитесь. Чтоб работало или таки "за минимальное количество обращений к БД"? Какие варианты у Вас уже получились?
29 май 09, 00:25    [7242239]     Ответить | Цитировать Сообщить модератору
 Re: Хранение истории версий значений  [new]
AT/F0x
Member

Откуда: Moscow
Сообщений: 20
SELECT COUNT(*) FROM Версии JOIN Значения ON Версии.Id=Значения.Link_Версия WHERE Версии.ДатаВерсии<='2009-05-01'

Или я совсем ничего не понимаю в оптимизации? :)
29 май 09, 05:37    [7242369]     Ответить | Цитировать Сообщить модератору
 Re: Хранение истории версий значений  [new]
AT/F0x
Member

Откуда: Moscow
Сообщений: 20
Прошу прощения, не дочитал. Либо добавить GROUP BY ДатаВерсии, ИмяПеременной, либо сделать SELECT COUNT(*) FROM (SELECT DISTINCT ИмяПеременной WHERE ...) a
29 май 09, 05:40    [7242370]     Ответить | Цитировать Сообщить модератору
 Re: Хранение истории версий значений  [new]
jbond81
Member

Откуда:
Сообщений: 743
АнатоЛой
jbond81

за минимальное число обращений к БД

Это дааа.... Сами придумали или преподаватель так задачу ставил?


Это Нуралиев еще в 96 году придумал.

Перидическими значениями зовут.

А 8.х по другому называются
29 май 09, 10:40    [7242917]     Ответить | Цитировать Сообщить модератору
 Re: Хранение истории версий значений  [new]
SQL Bigot
Member

Откуда:
Сообщений: 841
jbond81,

Для всех "ИмяПеременной" находишь запись в таблице 1 с максимальной "ДатаВерсии", которая меньше или равна дате, на которую хочешь получить "Значение_Переменной_В_Этой_Версии", потом связываешь полученный список с таблицей 2

Или связываешь таблицы 1 и 2 и добавляешь условие что "ДатаВерсии" = (ищем максимальную дату,которая меньше или равна искомой дате для "ИмяПеременной")
29 май 09, 10:48    [7242977]     Ответить | Цитировать Сообщить модератору
 Re: Хранение истории версий значений  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
jbond81
имеется таблица Версии (Id, ДатаВерсии,...) и подчиненная ей таблица Значения (Id, Link_Версия, ИмяПеременной, Значение_Переменной_В_Этой_Версии) Необходимо узнать (за минимальное число обращений к БД) список актуальных значений всех переменных на указанную дату.
AT/F0x
SELECT COUNT(*) FROM Версии JOIN Значения ON Версии.Id=Значения.Link_Версия WHERE Версии.ДатаВерсии<='2009-05-01' Или я совсем ничего не понимаю в оптимизации? :)
это работать будет неправильно, так как история значений "лежит" не на каждый день, а только с той датой, когда происходит изменение. правильно примерно так:
declare @АктуальнаДата datetime
set @АктуальнаДата = '20090528'

select ИмяПеременной, АктуальнаяВерсия, var1.Значение 
from
(select DISTINCT 
	ИмяПеременной, 
	(select top 1 t. Link_Версия
		from Значения t join Версии t1 on (t.Link_Версия = t1.Id)
		where not t1.ДатаВерсии > @АктуальнаДата
		  and t.ИмяПеременной = var.ИмяПеременной
		order by t1.ДатаВерсии
	) as АктуальнаяВерсия
	from Значения var
) result
left outer join Значения var1 on (result. АктуальнаяВерсия = var1. Значение_Переменной_В_Этой_Версии)
p/s/ Только при чём тут "проектирование"...?
Модератор: Тема перенесена из форума "Проектирование БД".


Сообщение было отредактировано: 29 май 09, 16:57
29 май 09, 13:17    [7244028]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить