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

Вниз

Помогите написать запрос на select   Найти похожие ветки 

 
greg123   (2008-09-11 17:51) [0]

Подскажите пожалуйста как написать запрос на выборку уз таблицы T1, у которой есть 2 поля месяц и год - оба smallint.
Необходимо отобрать только те записи, у которых диапазон этих полей от декабря 2006 до января 2007.

select FAM,IM,OTCH from T1
where ((rollyear>=2006 and rollmonth>=12) and (rollyear<=2007 and rollmonth<=1)) - не работает :(

Заранее спасибо.


 
Правильный$Вася   (2008-09-11 17:54) [1]


>  не работает

естественно, т.к. rollmonth>=12 аnd rollmonth<=1 противоречат друг другу


 
DrPass ©   (2008-09-11 17:55) [2]

rollyear * 100 + rollmonth >= 200612 and rollyear * 100 + rollmonth <= 200701


 
DrPass ©   (2008-09-11 17:56) [3]

вернее, rollyear * 100 + rollmonth between 200612 and 200701


 
Правильный$Вася   (2008-09-11 18:01) [4]


> DrPass ©   (11.09.08 17:56) [3]

интересно, к какому типу будет приведен результат
smallint маловат будет...


 
greg123   (2008-09-11 18:05) [5]

Большое спасибо, всё заработало (всё работает без приведения типа)


 
Ega23 ©   (2008-09-11 18:10) [6]


> rollyear * 100 + rollmonth


Оригинально. Буду иметь ввиду. Спасибо.


 
Правильный$Вася   (2008-09-11 18:30) [7]


> Оригинально

очень старый трюк
особенно для тех, кто работал с DBF


 
Anatoly Podgoretsky ©   (2008-09-11 18:53) [8]

Личные извращения над датами, до добра не доводят.
Автор в любой СУБД есть тип ДАТА


 
DrPass ©   (2008-09-11 23:27) [9]


> Anatoly Podgoretsky ©   (11.09.08 18:53) [8]

Такая разбивка может иметь смысл - например, если он часто строит выборки с разбивкой по месяцам. В этом случае будет эффективнее хранить год/месяц отдельно, чем каждый раз выцеплять его из даты


 
sniknik ©   (2008-09-12 01:24) [10]

> Такая разбивка может иметь смысл - например, если он часто строит выборки с разбивкой по месяцам.
не очень большой смысл, т.к. в MSSQL есть более нормальный вариант.
при "разобранной" дате ее придется "собирать" для отображения, периоды отбирать с мелкими, но проблемами, вроде той что в этой ветке, а если ввести дублирующее поле с датой тогда будут другие с вводом и синхронизацией.

в нормальном варианте потребуется только одно поле с датой, а для выборок по месяцам ввести вычисляемое(т.е. собственно поля нет, значение вычисляется при обращении) поле с индексом (там есть переключатель котрый позволяет построить индекс по "воздуху")... тогда, если поле не отображать, не обращаться к нему (а вроде и незачем, отображать только нормальную дату), не будет пересчета на выборках, но при вносе/изменении все само синхронизируется, а для выборок используется индекс, а не значение, т.е. группировка/разбивка по месяцам будет максимально быстрой т.к. по индексу.
т.е. эффективнее эффективности только эффективность без гемороя... что и дает 2-й вариант.



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

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

Наверх





Память: 0.47 MB
Время: 0.004 c
3-1221062245
mini
2008-09-10 19:57
2009.05.24
сервисы и Interbase не дружат?


2-1239457733
Индеец
2009-04-11 17:48
2009.05.24
RTTI и конструктор класса


15-1235573250
Dennis I. Komarov
2009-02-25 17:47
2009.05.24
delphimaster.ru :)


2-1239007118
@!!ex
2009-04-06 12:38
2009.05.24
StringReplace не работает с длинными строками?


2-1239604935
ganda
2009-04-13 10:42
2009.05.24
Корректно убить поток в самом потоке





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский