Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
cerber
Зарегистрирован: 19.12.2003 Сообщения: 296 Откуда: Казахстан, Актюбинск
|
Добавлено: Ср Авг 25 2004 09:21 Заголовок сообщения: выборка на sql |
|
|
проблема в следующем
есть таблица
модель int
цена money
дата datetime
и дана дата
в таблице для одной модели может быть несколько цен с датой её (цены) занесения
нужно для каждой модели вывести цены дата занесения которой меньше данной.
во накрутил то , сеть какие идеи?
у мены есть ваиант но он с курсором и поэтому тормоз ужастный. |
|
Вернуться к началу |
|
 |
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. Юсеру не обязательно показывать время _________________ До onlina Andrew C. |
|
Вернуться к началу |
|
 |
cerber
Зарегистрирован: 19.12.2003 Сообщения: 296 Откуда: Казахстан, Актюбинск
|
Добавлено: Чт Авг 26 2004 10:23 Заголовок сообщения: |
|
|
спасибо работает , как до этого сам не додумался
две одинаковые даты это типа
1 5 20,08,04
1 6 20,08,04
ну это уже проблемы юзеров и по шапке они будут получать.
Но сколько я здесь работаю такой ситуации не видел, и дай бог не увижу. |
|
Вернуться к началу |
|
 |
Гость
|
Добавлено: Чт Авг 26 2004 10:29 Заголовок сообщения: |
|
|
Лучше контролировать целостность данных на серваке.
Ну например: уникальный ключ по модель+дата |
|
Вернуться к началу |
|
 |
cerber
Зарегистрирован: 19.12.2003 Сообщения: 296 Откуда: Казахстан, Актюбинск
|
Добавлено: Чт Авг 26 2004 10:34 Заголовок сообщения: |
|
|
Anonymous писал(а): |
Лучше контролировать целостность данных на серваке.
Ну например: уникальный ключ по модель+дата |
Модель итак идентифицируется уникальным кодом. |
|
Вернуться к началу |
|
 |
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) дружу, но не очень
Больше с FB.
Там есть анализатор запросов и т.п
Лобовое решение: Сделать выборку по-больше. Запрос. Посмотреть время исполнения. Подрубить индекс. Посмотреть.
Должен быть план выполнения, где прописано какие индексы используются. _________________ До onlina Andrew C. |
|
Вернуться к началу |
|
 |
|