Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Microsoft SQL Server

Автор: VasyOK
Дата сообщения: 11.06.2009 12:31
Добрый день!

Подскажите запрос для такой задачи:

Есть товар (таблица Tovar), и история изменения цен по нему (TovarPrice: ID, IDTOVAR, PRICE, DATE). Необходимо по выбранному товару показать только последнюю цену
Автор: rkhodjaev
Дата сообщения: 11.06.2009 12:54
VasyOK

Цитата:
Необходимо по выбранному товару показать только последнюю цену

Имеете виду за послед. дату?
Автор: Xaoc666
Дата сообщения: 11.06.2009 21:10
VasyOK
Я бы посоветовал использовать таблицу изменения цен вида:
id, idtovar, price, bdate, edate
где bdate - дата начала действия записи, edate - дата окончания действия записи.
Для актуальных (незакрытых) записей в edate пишем, например, 2050-01-01.
Тогда будет возможность легко выбрать не просто актуальные записи (по условию edate=2005-01-01), но и записис на произвольную дату, для получения истории.

Редактирование такой таблицы, конечно, требует определенного кода, но зато мы получаем полные данные с быстрым доступом.
Автор: VasyOK
Дата сообщения: 12.06.2009 09:56
rkhodjaev


Цитата:
Имеете виду за послед. дату?


Да. Именно так.


Xaoc666, проблема в том что ни я базу делал и никто мне ее структуру менять не даст. А поставлнную задачу решить нужно
Автор: Xaoc666
Дата сообщения: 13.06.2009 15:39
VasyOK
На ум приходит что-то вроде

select
tp.ID, tp.IDTOVAR, tp.PRICE, tp.DATE
from
TovarPrice tp
where
tp.date = (select max(tp2date) from TovarPrice tp2 where tp2.IDTOVAR=tp.IDTOVAR)

но скорость работы такого запроса может оказаться низкой...
Автор: BlackVetal
Дата сообщения: 15.06.2009 05:36
VasyOK
Xaoc666
Я бы чуть-чуть изменил запрос - добавив условие, которое дало бы возможность выбрать актуальную цену на любую дату:

Код:
where
tp.date = (select max(tp2.date) from TovarPrice tp2 where tp2.IDTOVAR=tp.IDTOVAR AND tp2.date < @DateIn)
Автор: VasyOK
Дата сообщения: 15.06.2009 09:26
Xaoc666
BlackVetal

Спасибо То что нужно.
Автор: Tr00per
Дата сообщения: 23.06.2009 16:26
Какие есть рекомендации по обновлению SQL Express 2005 на Standard 2005 с работающими БД.
P.S. Можно запусть установку Standard, обновление пройдет корректно?
Автор: volser
Дата сообщения: 23.06.2009 17:00

Цитата:
Какие есть рекомендации по обновлению SQL Express 2005 на Standard 2005 с работающими БД.
P.S. Можно запусть установку Standard, обновление пройдет корректно?



1. Установите Standard. Будет создан новый инстанс.
2. Зарегистрируйте под новым инстансом свои базы.
3. Перестройте строку коннекта вешей программы на новый инстанс.
Автор: BlackVetal
Дата сообщения: 24.06.2009 05:35
Tr00per
Другой вариант - сделать бэкапы баз, удалить Экспресс (если вообще не нужен), поставить Стандарт и востановить из бэкапа базы. И последнее как сказал volser

Цитата:
3. Перестройте строку коннекта вашей программы

Автор: SIgor33
Дата сообщения: 24.06.2009 10:44
Tr00per
А что тебе мешает сначала отключить все MDF, затем переустановить sql и вновь подключиться
Автор: Tr00per
Дата сообщения: 24.06.2009 11:01

Цитата:
[/q][q]А что тебе мешает сначала отключить все MDF, затем переустановить sql и вновь подключиться


Хочется (от лени не перенастраивать сервер и чтоб связи все старые остались с прогами. Отсюда и вопрос. Что будет если накатить Standard на Express?
Автор: volser
Дата сообщения: 24.06.2009 11:17
Ничего не будет, станет рядышком, но с другим именем.
Автор: SIgor33
Дата сообщения: 07.07.2009 12:13
Такой возник вопрос как сравинить поля типа image в двух таблицах на серваке
Автор: AngeL
Дата сообщения: 08.07.2009 01:32
Сведения в данных image хранятся в виде строки битов и не обрабатываются SQL Server. Любая обработка данных в столбце image должна проводиться приложением. Все, что делает столбец image, — это предоставление места для хранения потока битов, составляющих значение данных image.

Судя по документации эти поля нельзя сравнивать, можно сравнить их размер.
Автор: SIgor33
Дата сообщения: 08.07.2009 08:11
AngeL
Размер неактуально. А сравнить можно используя SUBSTRING, только он по 8000 байт может. А длина может быть и больше, вот в чем затык
Автор: AngeL
Дата сообщения: 08.07.2009 09:20
SIgor33, это извращение
А вобще лучше избавляться от image...
Автор: SIgor33
Дата сообщения: 08.07.2009 10:14
AngeL
А в чем тогда хранить образы (файлы) документов?
А сравнение нужно для погрузки данных чтобы не плодить дубли
Автор: afiget
Дата сообщения: 08.07.2009 10:29
SIgor33
Для сравнения можно использовать хэш документа (md5, crc). Хранить его тоже в базе. Вычислять на клиенте. Сделать поле уникальным - тогда дублей не будет.
При этом, конечно, нужно учитывать, что операции вставки и редактирования будут занимать немного больше времени, чем сейчас (время вычисления хэша + время на проверку уникальности).
Автор: SIgor33
Дата сообщения: 08.07.2009 10:57
afiget
Я тут в хелпе нарыл функцию HashBytes как думаешь она случаем не поможет?
Насколько она дает уникальное значение
Автор: volser
Дата сообщения: 08.07.2009 10:59
SIgor33
HashBytes

Хеши могут повторятся.
Автор: SIgor33
Дата сообщения: 08.07.2009 11:25
volser
А как быть тогда лучше?
Чтобы допустим получить crc файла уже хранящего в базе и допустим измененого с помощью richview как нибудь чтобы пересчитать crc надо темр файл создавать и как быть в данном случае
Автор: volser
Дата сообщения: 08.07.2009 11:36
SIgor33
Считайте хеш на клиенте. Пишите в базу сам блоб и его хеш. Для этого можно воспользоваться этими компонентами.
Автор: SIgor33
Дата сообщения: 08.07.2009 13:01
volser
Спасибо за совет
Автор: afiget
Дата сообщения: 08.07.2009 17:12
HashBytes имеет ограничение на тип и длину обрабатываемых данных. Я потому и написал - на клиенте.
Автор: AngeL
Дата сообщения: 09.07.2009 01:09
SIgor33,
varbinary [ ( n | max) ]
Двоичные данные переменной длины. n могут иметь значение от 1 до 8000; max означает максимальную длину хранения, которая составляет 2^31-1 байт. Размер хранения — это фактическая длина введенных данных плюс 2 байта. Введенные данные могут иметь размер 0 символов. В SQL-2003 синонимом для varbinary является binary varying.

С этим типом данных у SQL Server предусмотрено гораздо больше функций для использования. И Microsoft везде рекоммендует использовать именно его.
Автор: SIgor33
Дата сообщения: 09.07.2009 08:05
AngeL
Спасибо за совет, я так и поступил стал использовать varbinary ( max) все заработало сравнивает. Жаль что на MSSQL 2000 это не покатит.
Автор: SIgor33
Дата сообщения: 28.07.2009 08:14
Теперь возник такой вопрос. На серваке поставил full-text search. Создал каталог в нем построил индекс по полям типа varchar(max) и varbinary(max). в varbinary ( max) хранятся rtf файлы. Поиск по varchar работает на ура, а вот в varbinary ничего ненаходит хотя задаю слово которое там точно есть. Помогите
Автор: Mamontoza
Дата сообщения: 03.08.2009 13:15
Всем привет. Народ помогите. Где можно найти мануал как правильно переставить SQL Server 2000. Необходимо с одной машины переставить на другую. Что необходимо установить для коректной работы- обновления и тд.
Автор: afiget
Дата сообщения: 03.08.2009 22:45
SIgor33
ALTER FULLTEXT INDEX c START FULL или UPDATE POPULATION пробовали делать?

Страницы: 1234567891011121314151617181920212223242526272829

Предыдущая тема: Генератор 10-ти разрядных ключей


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.