Страницы: 1
RSS
помощь с SQL запросом
 
Здравствуйте!
Прошу помощи в следующем - я сама столкнулась с SQL запросами в первый раз. Есть у нас к такой запрос:

select  top 10000 "phonecall0".createdon as "createdon" , "phonecall0".new_hvemringername as "new_hvemringername" , "phonecall0".new_omhvadname as "new_omhvadname" , "phonecall0".new_hvadgrjegname as "new_hvadgrjegname" , "phonecall0".owneridname as "owneridname" , "phonecall0".activityid as "activityid" , "phonecall0".new_genkaldname as "new_genkaldname" , "phonecall0".new_omhvadkategoriname as "new_omhvadkategoriname"  from  FilteredPhoneCall as "phonecall0" join (select top 1 dbo.fn_BeginOfThisMonth(GetUTCDate()) as createdon1,dbo.fn_EndOfThisMonth(GetUTCDate()) as createdon2 order by createdon1,createdon2) as createdondtc on 1=1  where  ("phonecall0".statecode is not null and  phonecall0.createdonutc >= createdondtc.createdon1 and phonecall0.createdonutc < createdondtc.createdon2 ) order by  "phonecall0".new_omhvadname desc , "phonecall0".activityid asc

У нас он работает только для текущего месяца.
Если я изменяю период на с BeginOfThisYear(GetUTCDate()) или BeginOfLastYear(GetUTCDate()), то он загружает только 10000 верхних строк. И если я изменяю количество строк на 100 000 или 50 000, то эксель не желает обрабатывать такое количество данных. Mне вообще нужно получить отчет в котором можно управлять периодом. Как можно изменить запрос, чтобы можно было получить более вменяемый период, ну хотя бы 3 последних месяца. Или же как увеличить количество выгружаемых строк?.  Очень прошу помочь экспертов изменить запрос, так чтобы можно было управлять периодом.

Спасибо заранее!
 
Доброе время суток
Если у вас поле createdonutc таблицы или представления FilteredPhoneCall имеет тип datetime, то можете фильтровать статически
Скрытый текст

Задавая начало и конец интересующей выборки "ручками", редактируя запрос.
Если как в представленном вами запросе хотите динамически, то создайте свою функцию, задающую начало выборки по текущей дате, например, dbo.fn_BeginOfNeededMonth(BaseDate, MonthOffset).
А для чего вам грузить 100500 строк, что вы с ними делаете? Какая версия Excel? Если вы используете эти данные для построения сводной, то сводную можно сразу строить по подключению, а не по выгрузке на лист. Просто сохраните текущее подключение в файл odc. Удалите лист с данными, на вкладке "Данные" кнопка "Подключения", добавьте это сохранённое подключение. Отредактируйте запрос. А затем создавайте сводную, выбрав это подключение.

Успехов.
 
простите, а что это? (BaseDate, MonthOffset)? я в  первый раз вижу SQL запрос,  поэтому многое и того, что вы написали мне не доступно, к сожалению...а для чего я хотела всю эту кучу строк выгружать-чтобы руководитель мог управлять отчетом без того чтобы изменять что то внутри запроса...я была бы крайне благодарна, если бы вы немного подробнее объяснили... я живу в чужой стране и общение с местными консультантами дается мне с большим трудом.

спасибо!
 
Почитайте тут
 
Доброе время суток
Вы бы потратили время на ответы на вопросы. Пока нижний диапазон дат в фильтре Where устанавливаем как
Код
phonecall0.createdonutc>=DATEADD(mm,-3, GetUTCDate())

а верхний
Код
phonecall0.createdonutc<DATEADD(dd,1, GetUTCDate())

Будет выбирать данные за последние 3 месяца. Больше пока за отсутствием информации по задаче сказать не могу. Даже не известно какой тип данных в phonecall0.createdonutc - может там целочисленное значение даты в UNIX формате и именно поэтому используется функция.

Успехов.
 
B.Key spasibo pochitayu!
Андрей VG Napisala vam v lichku. A poka vospolzuyus predlozhennimi vami resheniyami. Spasibo!
 
Андрей VG Chto-to na sinatksis rugaetsya...
 
Цитата
Havfrue написал:
Chto-to na sinatksis rugaetsya.
Вопросы-с
1. Какая версия SQL Server
2. Какой тип данных поля createdonutc таблицы или представления phonecall0
3. Покажите как составили запрос.
4. Каков текст ошибки - раз не получается.
 
Mne udalos' vigruzit vse dannie za 2 goda. Pole createdon vigruzhaetsya v formate data+vremya. Mozhno li izmenit' format predstavleniya dati na mesyac+god? (v prilozhennom file zapros). Dlya togo chtobi bilo legche vibirat' period (filtr createdon) v svodnoi tablice . Vsem spasibo! I izvinyayus za latinicu.
 
Для условий запроса MS SQL всегда  правильно будет интерпретировать дату в формате 'YYYYMMDD',
функция GetUTCDate() всегда возвращает дату в формате datetime.
Для преобразования даты в текст в нужном формате используйте функцию FORMAT
Для того что бы менять параметры запроса без использования vba смотрите ссылку, что я Вам уже приводил.
 
Vsem spasibo! Temu mozhno zakrit!
Страницы: 1
Читают тему
Наверх