Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

выборка на sql

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Ср Авг 25 2004 09:21    Заголовок сообщения: выборка на sql Ответить с цитатой

проблема в следующем
есть таблица
модель int
цена money
дата datetime

и дана дата
в таблице для одной модели может быть несколько цен с датой её (цены) занесения
нужно для каждой модели вывести цены дата занесения которой меньше данной.

во накрутил тоSmile, сеть какие идеи?
у мены есть ваиант но он с курсором и поэтому тормоз ужастный.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Marmota Bobak



Зарегистрирован: 28.07.2004
Сообщения: 68

СообщениеДобавлено: Ср Авг 25 2004 13:58    Заголовок сообщения: Ответить с цитатой

может, что не понял - в чем проблема с
SELECT * FROM table WHERE data<$current_date ?????
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Ср Авг 25 2004 15:11    Заголовок сообщения: Ответить с цитатой

проблема в том что этот запрос для конкретной модели выбрасывает несколько строк.
пример
модель цена дата
1 5 12.05.04
1 6 20.08.04
1 4 10.05.04
запрос должен вернуть, при условии <=20.08.04
модель цена дата
1 5 12.05.04
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andy-C



Зарегистрирован: 09.12.2003
Сообщения: 73
Откуда: Нальчик

СообщениеДобавлено: Чт Авг 26 2004 10:14    Заголовок сообщения: Ответить с цитатой

SELECT * FROM table WHERE model=model and date =
(select max(date) from table where data<$current_date and model=model)

при условии, что не может быть несколько записей с одной датой. Иначе хранить не дату, а timestamp. Юсеру не обязательно показывать времяSmile
_________________
До onlina Andrew C.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Чт Авг 26 2004 10:23    Заголовок сообщения: Ответить с цитатой

спасибо работает Smile , как до этого сам не додумался Embarassed

две одинаковые даты это типа
1 5 20,08,04
1 6 20,08,04

ну это уже проблемы юзеров и по шапке они будут получать.

Но сколько я здесь работаю такой ситуации не видел, и дай бог не увижу.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Гость






СообщениеДобавлено: Чт Авг 26 2004 10:29    Заголовок сообщения: Ответить с цитатой

Wink
Лучше контролировать целостность данных на серваке.
Ну например: уникальный ключ по модель+дата
Вернуться к началу
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Чт Авг 26 2004 10:34    Заголовок сообщения: Ответить с цитатой

Anonymous писал(а):
Wink
Лучше контролировать целостность данных на серваке.
Ну например: уникальный ключ по модель+дата

Модель итак идентифицируется уникальным кодом.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andy-C



Зарегистрирован: 09.12.2003
Сообщения: 73
Откуда: Нальчик

СообщениеДобавлено: Чт Авг 26 2004 10:40    Заголовок сообщения: Ответить с цитатой

cerber писал(а):
Модель итак идентифицируется уникальным кодом.


Это я понял.
Если завести ключик именно по (модель, дата {может вниз}), оно само будет быстро искать и контролировать, чтоб для одной модели не было записей за одну дату.
_________________
До onlina Andrew C.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Чт Авг 26 2004 12:27    Заголовок сообщения: Ответить с цитатой

в этой таблице есть поле PKey и это поле является первичным ключём, ты про это?
а две записи с одинаковыми моделью и датой вставляются.
кстати это крутится на MS SQL SERVER 2000.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andy-C



Зарегистрирован: 09.12.2003
Сообщения: 73
Откуда: Нальчик

СообщениеДобавлено: Чт Авг 26 2004 12:42    Заголовок сообщения: PKey Ответить с цитатой

Всё правильно.
Первичный ключик по какому-то полю. И оно следит чтоб это поле было уникальное в пределах таблицы (исключая NULL).
Желательно завести: create unique (может быть DESC) index super_buper_index on табличка(модель,дата)
Смотря какие ещё запросы есть и как оптимизирует сервак, вожможно надо индекс вниз или (дата,модель).
Тогда искать по модели и дате будет быстрее (ну индексный поиск, вероятно, будет) + будет следить за уникальностью сочетания (модель, дата) (ну + NULL).

Если я всё правильно путаю...
_________________
До onlina Andrew C.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Чт Авг 26 2004 15:03    Заголовок сообщения: Ответить с цитатой

а как мне определить нужен этот индекс или нет, на глаз или чем то вроде профайлела sql'кого?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Andy-C



Зарегистрирован: 09.12.2003
Сообщения: 73
Откуда: Нальчик

СообщениеДобавлено: Чт Авг 26 2004 15:18    Заголовок сообщения: Ответить с цитатой

Я с ним (MS SQL Server) дружу, но не очень Sad
Больше с FB.

Там есть анализатор запросов и т.п
Лобовое решение: Сделать выборку по-больше. Запрос. Посмотреть время исполнения. Подрубить индекс. Посмотреть.

Должен быть план выполнения, где прописано какие индексы используются.
_________________
До onlina Andrew C.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...