Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - украшаем запрос MS SQL

Ответить
Настройки темы
Разное - украшаем запрос MS SQL
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


1. можно ли как-то запустить Query Analyzer (2000) с ярлычка, чтоб он не заново запускался, а создал окошко в уже открытом аналайзере? А то задолбал плодиться, я забываю смотреть, есть он в живых или нет.

2. есть уже заполненная табличка:
Код: Выделить весь код
declare @dates1 table (
  recId     integer,  // прочая информация
  groupId  integer, // поле для группировки
  dateIn    datetime,  // начало отрезка времени
  dateOut   datetime); // конец отрезка времени
нужно оставить в ней записи, имеющие хотя бы одно пересечение с другими при одинаковой groupId. Остальные удалить. Я сделал, но мне кажтся чёто как-то некрасиво и медленно, через delete where not exists(...). Сами понимаете, некрасивые самолёты не летают. Есть варианты как причесать запрос?

Отправлено: 15:18, 15-09-2008

 
pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


остаётся вопрос с временными view. Можно такие сделать? На сколько это критично к ресурсам? у меня услуги - это
Код: Выделить весь код
accDebet join accCliPay on (accCliPay.accPayId=accDebet.accPayId and accCliPay.payCod=1)
Временные - это в том смысле, чтобы они уничтожались после выхода из блока, где были созданы, независимо от того успешно прошла операция или нет

Отправлено: 08:35, 18-09-2008 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Да, запрос у меня получился несколько однобокий.

AFAIK вьюхи интерпритируются примерно как макрос - т.е. хранится только код запроса, и он подставляется в другие запросы - содержимое view никак специально не индексируется, не кешируется и т.п.
Можно использовать не view, а подзапрос:

Код: Выделить весь код
select *
  from
    (select * from accDebet join accCliPay on (accCliPay.accPayId=accDebet.accPayId and accCliPay.payCod=1)) as u1,
    (select * from accDebet join accCliPay on (accCliPay.accPayId=accDebet.accPayId and accCliPay.payCod=1)) as u2
  where
    u1.dateIn>'2008-08-15' and u2.dateIn>'2008-08-15' -- 4 недели назад - лучше вынести в переменную
    and u1.groupId=u2.groupId2 and u1.recId<>u2.recId
    and u1.dateIn>=u2.dateIn and u1.dateIn<=u2.dateOut
так, по идее, в итоге каждая пара будет выдаваться один раз одной строкой (за исключением случая, когда dateIn у них идентичные - надо обрабатывать отдельно).
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:56, 18-09-2008 | #12

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


когда идентичные - это нормально, нужно обе выдавать. Вот теперь красиво получилось! Пасиба *DRINK*. Единственное, со знаком ">=" всё-таки надо строгое ограничение (без , потому что если одна услуга заканчивается '2008-09-18 12:00' а другая начинается в это же время - это не пересечение

Отправлено: 07:41, 19-09-2008 | #13


Аватара для kim-aa

Назгул


Сообщения: 2633
Благодарности: 345

Профиль | Отправить PM | Цитировать


Цитата pva:
Временные - это в том смысле, чтобы они уничтожались после выхода из блока, где были созданы, независимо от того успешно прошла операция или нет »
Можно, но права администратора БД-нужны, (что не правильно в приложении).

View, с точки зрения программиста - SQL-запрос/макрос хранимый на стороне сервера. С точки зрения видимости - таблица БД.
Т. е. этакая виртуальная динамическая таблица.
Т. к. View практически ничего не занимают, то смысла Создавать-Удалять их в процессе выполнения нет никакого.
Более того, с точки зрения структурирования и изоляции кода это глупость.

Хочу заметить, что связка нескольких View в одном запросе читабельнее чем один сложный запрос с join.

Если вы хотите использовать конструкции управляемые в процессе выполнения, обратите внимание на хранимые процедуры.

-------
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера. (c)Жванецкий


Отправлено: 11:02, 19-09-2008 | #14

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата kim-aa:
Хочу заметить, что связка нескольких View в одном запросе читабельнее чем один сложный запрос с join. »
Поэтому и подумываю как бы тут view применить
Цитата kim-aa:
Если вы хотите использовать конструкции управляемые в процессе выполнения, обратите внимание на хранимые процедуры. »
Рассматриваем только данный конкретный случай: нужно сказать серверу что я собираюсь сделать 2 раза одинаковый запрос и соединить его. Оставлять view навека в базе не хочется. Всё-таки временную таблицу (declare @t1 table...) сделать?

Отправлено: 20:48, 20-09-2008 | #15


Аватара для kim-aa

Назгул


Сообщения: 2633
Благодарности: 345

Профиль | Отправить PM | Цитировать


Цитата pva:
Оставлять view навека в базе не хочется »
А почему собственно? Они для этого и предназначены.

Цитата pva:
Всё-таки временную таблицу (declare @t1 table...) сделать? »
Временная таблица, ( т. е. та которая существует только во время сессии - я правильно вспомнил терминологию MS SQL? Давно не работал с ним.)
Тоже не плохой выход, особенно с точки зрения, работы с высоконагруженными базами.
Наверно, самый оптимальный случай особенно при очень сложных выборках.

С точки зрения блокировок, "монолитный" запрос это самое печальное.

-------
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера. (c)Жванецкий


Отправлено: 11:16, 22-09-2008 | #16


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата kim-aa:
Временная таблица, ( т. е. та которая существует только во время сессии - я правильно вспомнил терминологию MS SQL? »
на самом деле pva путает понятия временная локальная таблица и таблица-переменная. Он использует таблицу-переменную. Суть, впрочем, та же - автоматически удаляется с закрытием сессии.

Цитата kim-aa:
Тоже не плохой выход, особенно с точки зрения, работы с высоконагруженными базами. »
очень спорно - выборка по данным та же, но временную таблицу ещё надо где-то хранить и строить к ней свои индексы. В данном случае - совершенно неэффективно.

Отправлено: 14:03, 22-09-2008 | #17


Аватара для kim-aa

Назгул


Сообщения: 2633
Благодарности: 345

Профиль | Отправить PM | Цитировать


Цитата Busla:
но временную таблицу ещё надо где-то хранить и строить к ней свои индексы. »
"Быстро, качественно, недорого. Выберите любые два пункта!"
Естественно придется жертвовать памятью ради скорости, либо наоборот.

Что касаемо индексов. Вроде бы человек туда уже агрегированные данные собирается выгружать?
Если же нет, то вы правы, когда размер временной таблицы соизмерим с основной, то смысла это не имеет.

Однако, повторюсь:
1) Лично я бы работал с View.
2) С MS SQL не работал давно, за сим мои мысли о проиводительности можно опустить, как ламерские

-------
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера. (c)Жванецкий


Отправлено: 18:37, 22-09-2008 | #18

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата kim-aa:
Цитата pva:
Оставлять view навека в базе не хочется »
А почему собственно? Они для этого и предназначены. »
Потому что view типа "показать данные за 4 недели" несёт смысловую нагрузку только для данного конкретного запроса, который выполняется раз в месяц. Нужен он только для того, чтобы сказать серверу, что я собираюсь сделать 2 раза одинаковую выборку. Если бы это была наполненная смыслом выборка хотя бы для нескольких отчётов, я бы сделал view без вопросов.
Цитата Busla:
на самом деле pva путает понятия временная локальная таблица и таблица-переменная »
каюсь! мне нужно то, (не знаю как оно правильно называется) что самоуничтожится как автоматическая переменная в с++

Отправлено: 07:02, 23-09-2008 | #19


Аватара для kim-aa

Назгул


Сообщения: 2633
Благодарности: 345

Профиль | Отправить PM | Цитировать


pva,

Может быть имеет смысл применить функции пользователя ?

Будете передавать в нее две переменных (временной диапазон), получать таблицу.

-------
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера. (c)Жванецкий


Отправлено: 10:40, 23-09-2008 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - украшаем запрос MS SQL

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие БД - SQL запрос на выборку по дате echo off Программирование и базы данных 1 10-06-2009 01:15
Delphi - [решено] SQL-запрос на Delphi FRZ Программирование и базы данных 2 16-04-2009 15:42
sql запрос E-mail Вебмастеру 20 30-12-2006 22:31
SQL запрос pauluss Вебмастеру 5 11-06-2004 09:14
SQL-запрос anridir Программирование и базы данных 2 23-09-2002 07:11




 
Переход