Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

Поиогите разобраться с SQL запросом   Найти похожие ветки 

 
Krechetov ©   (2004-05-18 06:26) [0]

Доброго времени суток!
Вопрос в следующем:
Имеется поле типа Integer, положительные и отрицательные значения.
Делаю запрос:
SELECT * FROM  WORK
WHERE DATEDIFF (DAY, LASTACTIONTIME, GETDATE()) <= :par_devday AND ((DEV_UNLD >= :par_dev) OR (-DEV_UNLD >= :par_dev))
ORDER BY LASTACTIONTIME

Выдает только положительные значения!
Если вместо параметра "par_dev" подставить числа допустим 200 все прекрасно работает, выдает результат числа все что больше 200 и меньше -200.
Понимаю что ошибка где-то в запросе, но где непойму.
Подскажите кто знает или встречался с таким.
Премного благодарен!!!


 
Krechetov ©   (2004-05-18 07:14) [1]

Все вопрос можно закрыть!
Ответ найден, если кому интересно:
SELECT * FROM  WORK
WHERE DATEDIFF (DAY, LASTACTIONTIME, GETDATE()) <= :par_devday AND abs(DEV_UNLD) >= :par_dev ORDER BY LASTACTIONTIME


 
KSergey ©   (2004-05-18 08:18) [2]

Просто совет: никогда не используйте параметр дважды в запросе
Если он нужен не один раз - делаем так:

DECLARE @par1 int
SET @par1=:param1

SELECT.... - здесь уже используем @par1 столько раз, сколько нужно


 
sniknik ©   (2004-05-18 08:31) [3]

первый запрос лутше, если хочеш чтобы индекс по полю DEV_UNLD использовался, хотя бы в одном условии.
по второму и первое и второе условие вычисляемые, а это полный скан таблицы всегда.
в первом хоть и с ошибкой но логика чуть лутше, надо просто ошибки исправить.
а так и по полю LASTACTIONTIME индекс будет работать (если они конечно есть эти индексы ;), если нет то к чему волноватся, в любом случае полный скан таблицы ;о))
SELECT * FROM WORK
WHERE LASTACTIONTIME >= GETDATE()-:par_devday AND NOT (DEV_UNLD BETWEEN :par_dev1 AND :par_dev2)
ORDER BY LASTACTIONTIME
вот, должно быть лутше (быстрее на больших обьемах, в случае с индексами). параметров должно быть обязательно два (1 = -200, 2 = 200) т.к. наверное используется ADO (?) он в отличии от BDE не понимает дубли в названиях параметров (ссылка по имени присвоит значении первому, второй неинициализируется).



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.038 c
1-1085119168
IrBisoff
2004-05-21 09:59
2004.06.06
Правильная передача в Dll структуры данных.


14-1084868084
<skipped>
2004-05-18 12:14
2004.06.06
D7 Personal License


3-1084539981
Kinda
2004-05-14 17:06
2004.06.06
Округление чисел


1-1085129166
AlexXn
2004-05-21 12:46
2004.06.06
XML


8-1079995780
SynteZZZ
2004-03-23 01:49
2004.06.06
Рисование на PainBox сразу после старта программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский