Программы "Простой софт" www.prostoysoft.ru

ВНИМАНИЕ! РЕКЛАМНЫЕ СООБЩЕНИЯ И ГИПЕРССЫЛКИ В ФОРУМЕ ЗАПРЕЩЕНЫ (посты удаляются автоматически)
Текущее время: 25.11.2024 01:28

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Сложный запрос
СообщениеДобавлено: 23.05.2014 14:24 
Не в сети

Зарегистрирован: 29.04.2014 17:21
Сообщения: 6
Добрый День.

У меня есть 2 таблицы: tblMain и подчиненная ей таблица tblDocStatus
с полями (Id, DocIndex (FK на tblMain.IndexDoc), Status (Статус документа),
LastUpdate(Дата начиная с которой действует статус))
В tblMain я хочу добавить вычисляемое поле которое бы отображало последний
(по дате, времени) статус документа
Для этого я пишу запрос
(select ds1.Status
from tblDocStatus DS1
where ds1.LastUpdate = (select max(DS2.LastUpDate) from tblDocStatus DS2 where DS2.DocIndex = DS1.DocIndex )
and DS1.DocIndex = '02-3-15')

Предполагается что для каждого документа он должен вернуть статус документа с индексом 02-3-15 однако вычисляемое поле заполнено только у одной записи
а у всех остальных пусто
Подскажите пожалуйста куда смотреть.??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 23.05.2014 16:45 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Скриншоты таблиц и их диалогов "Настройка полей". П.7 Правил форума.

P.S. Вы же сами указываете в запросе привязку к конкретной записи основной таблицы (and DS1.DocIndex = '02-3-15'), естественно будет результат только для этой записи основной таблицы!

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 23.05.2014 19:49 
Не в сети

Зарегистрирован: 29.04.2014 17:21
Сообщения: 6
OMEN писал(а):
Скриншоты таблиц и их диалогов "Настройка полей". П.7 Правил форума.

P.S. Вы же сами указываете в запросе привязку к конкретной записи основной таблицы (and DS1.DocIndex = '02-3-15'), естественно будет результат только для этой записи основной таблицы!


Я как бы SQL тоже знаю немного :-)
Поясняю..
Если бы ВСЕ записи были бы заполнены одним и тем же значением
(поле как мы помним ВЫЧИСЛЯЕМОЕ) вопросов бы не было..
но заполнена ОДНА запись.
причем СОВСЕМ с другим индексом
Странно не прав да ли ??

Вот запрос..
(select ds1.Status from tblDocStatus DS1 where ds1.LastUpdate = (select max(DS2.LastUpDate) from tblDocStatus DS2 where DS2.DocIndex = DS1.DocIndex ) and DS1.DocIndex = '02-2-6')
Перемена цифр- как мы поняли ничего не дает..
Зеленым выделено поле "в запросе"..
Красным - то что вышло
И диалог :-)
Ловите скриншоты
Вложение:
Скрин 2 .jpg
Скрин 2 .jpg [ 101.33 КБ | Просмотров: 81126 ]

Вложение:
Скрин 1 .jpg
Скрин 1 .jpg [ 27.93 КБ | Просмотров: 81126 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 23.05.2014 20:12 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Возможно, это ограничение AccessSQL. Попробуйте перевести БД под MS SQL Server и попробуйте там.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 23.05.2014 20:20 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Со скриншотами теперь все понятно. Как вариант для просмотра требуемого вычисленного значения вашего выражения для текущей записи попробуйте перенести запрос в итоги таблицы, мне кажется, там заработает.

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 26.05.2014 13:14 
Не в сети

Зарегистрирован: 29.04.2014 17:21
Сообщения: 6
По поводу "ограничений " :-)
Внимание ФОКУС- ПОКУС :-)
Итак.. Смотрим..
Вложение:
SQL до.jpg
SQL до.jpg [ 114.42 КБ | Просмотров: 81105 ]


И вот.. Опсь.. Вуаля
Вложение:
Скин после.jpg
Скин после.jpg [ 86.46 КБ | Просмотров: 81105 ]

Получаем нужное..
Ну то есть запрос у нас работает..
Отсюда три вопроса..
1. А почему в формуле вычисляемого поля - НЕ работает ??
2. Как сделать так чтобы работал ??
3. Если нельзя сделать " в лоб" - как сделать " в обход" ??
Ну и комментарии
Я надеюсь понятно что вместо фиксированного значения индекса -
я хочу использовать поле индекса из главной таблицы..
Для БД данная задача - ну просто " из учебника" ( могу привести ссылку на учебник MS ACCESS SQL чей
не помню , задачка там - про " выбрать значение на заданную дату", да и в фирменном руководстве по SQL - похожая задача есть )
Помещение поля " в итоги" меня не устраивает.. Поле мне нужно не для " удобства пользователя" а прежде
всего "для служебных целей"..
На базе текущего значения в главной таблице будут срабатывать условия и триггеры на записи..
Ставим вопрос по другому..
У кого нибудь есть готовый рабочий вариант решения подобной задачи ??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 26.05.2014 15:43 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
>Итак.. Смотрим..
А куда именно смотреть? В поле "Дата наступлен..."?
Нельзя ли сделать это поле чуточку пошире, тк очевидно значения и само наименование поля не помещаются.
То, что в подсказке на желтом фоне, это важно? Или случайно сработало?
Куда смотреть, подчеркните, пожалуйста красной жирной линией или овалом.

Вы не пробовали задавать данный вопрос на профильных форумах по Access?
Язык запросов AccessSQL имеет ограничения. Вы делаете подзапрос в подзапросе - это необычно (для MS JET, но вполне нормально и даже "обыденно" для T-SQL).
Кстати, как избежать этих подзапросов, написано в типовом вопросе №19.
Возьмите весь SQL представления qdfMain и задайте ваш вопрос "Почему так" на форуме sql точка ru в разделе Access.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 26.05.2014 18:23 
Не в сети

Зарегистрирован: 29.04.2014 17:21
Сообщения: 6
Ivan писал(а):
>Итак.. Смотрим..
А куда именно смотреть? В поле "Дата наступлен..."?
Нельзя ли сделать это поле чуточку пошире, тк очевидно значения и само наименование поля не помещаются.
То, что в подсказке на желтом фоне, это важно? Или случайно сработало?
Куда смотреть, подчеркните, пожалуйста красной жирной линией или овалом.

Вы не пробовали задавать данный вопрос на профильных форумах по Access?
Язык запросов AccessSQL имеет ограничения. Вы делаете подзапрос в подзапросе - это необычно (для MS JET, но вполне нормально и даже "обыденно" для T-SQL).
Кстати, как избежать этих подзапросов, написано в типовом вопросе №19.
Возьмите весь SQL представления qdfMain и задайте ваш вопрос "Почему так" на форуме sql точка ru в разделе Access.


Смотреть мой исходный вопрос..
Выделил как вы желаете
Запрос в рамке.. Значения стрелками..
Вложение:
SQL после.jpg
SQL после.jpg [ 99.05 КБ | Просмотров: 81091 ]

Вложение:
Вложение SQL до (вариант 2).jpg больше недоступно

К запросу претензий нет..
К Access - кстати тоже.. Единичный запрос выполняется верно..

Есть вопросы к программе ибо дока по Access прямо гласит что
"Calculated columns are part of life on a spreadsheet, but do not belong in a database table."
А и ничего "необычного" в простых вложенных запросах в MS JET нет..
Мы же ничего не считаем и не сортируем.. Мы только отбираем последнее значимое значение..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 26.05.2014 18:44 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
>Предполагается что для каждого документа он должен вернуть статус документа с индексом 02-3-15 однако вычисляемое поле заполнено >только у одной записи а у всех остальных пусто
>Подскажите пожалуйста куда смотреть.??

Откройте БД в приложении Microsoft Access (любой версии), откройте представление qdfMain (в котором у вас создано это вычисляемое поле)
и посмотрите на результат выполнения данного хранимого запроса (представления).
Какие после этого претензии к программе?

Кстати, тот факт, что у вас в поле ID пусто, может навести вас на причину данного нежелательного эффекта.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 28.05.2014 14:13 
Не в сети

Зарегистрирован: 29.04.2014 17:21
Сообщения: 6
Господа

Вообщем то проблема решилась через построение дополнительной вьюшки..
Спасибо всем кто откликнулся.. И навел меня на решение..
Кому интересно - могу поделится..

От себя.
Не в обиду разработчикам.
Я с глубоким уважением отношусь к любому ПО.
Просто интересно
За что же вы так "люто не любите" сложные вложенные запросы ? :-)
Можно не отвечать :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложный запрос
СообщениеДобавлено: 28.05.2014 15:15 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
>За что же вы так "люто не любите" сложные вложенные запросы ?
Ситуация, описанная в типовом вопросе №19 основана на фактических замерах времени выполнения (производительности) двух разных подходов. Представление с вложенными запросами имеют ограничения (нельзя наложить более одного фильтра на таблицу вместе сортировкой и другие "прелести"). Все это относится только к Access.
Т.к. в MS SQL все по-другому - там есть довольно разумный план запроса. И там уже не особо важно, как разработчик напишет свой запрос, все равно он будет приведен к оптимальному плану, и выполнен максимально эффективно.
У JOIN-ов бОльший приоритет, чем у вложенных подзапросов. Так это даже исторически складывалось.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB