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

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

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




Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 19.11.2014 08:46 
Не в сети

Зарегистрирован: 19.11.2014 08:34
Сообщения: 27
Пытаюсь добавить поле "Дата последнего контакта" в таблицу "Клиенты".
Поле вычисляемое по формуле:
(select top 1 tblActions.StartTime from tblActions where (((tblActions.ClientID) = tblMain.ID) and tblActions.ActionStatus = 'Состоялось') order by tblActions.StartTime desc;)
Таблица "Клиенты" становится необновляемой.
Пытаюсь создать вспомогательную виртуальную таблицу qdfLastActionDate, чтобы воспользоваться просто ссылками на ее поля (как рекомендует разработчик)
Подскажите, пожалуйста, как сформировать запрос, чтобы в эту вспомогательную таблицу попадали последние события со статусом "Состоялось" для каждого клиента.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19.11.2014 09:54 
Не в сети

Зарегистрирован: 25.01.2012 11:41
Сообщения: 186
checked писал(а):
Пытаюсь добавить поле "Дата последнего контакта" в таблицу "Клиенты".
Поле вычисляемое по формуле:
(select top 1 tblActions.StartTime from tblActions where (((tblActions.ClientID) = tblMain.ID) and tblActions.ActionStatus = 'Состоялось') order by tblActions.StartTime desc;)
Таблица "Клиенты" становится необновляемой.
Пытаюсь создать вспомогательную виртуальную таблицу qdfLastActionDate, чтобы воспользоваться просто ссылками на ее поля (как рекомендует разработчик)
Подскажите, пожалуйста, как сформировать запрос, чтобы в эту вспомогательную таблицу попадали последние события со статусом "Состоялось" для каждого клиента.


Может я чего не понял, но....

select max(tblActions.StartTime) from tblActions where (((tblActions.ClientID) = tblMain.ID) and tblActions.ActionStatus = 'Состоялось')


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 2 RMelnyk
СообщениеДобавлено: 19.11.2014 10:15 
Не в сети

Зарегистрирован: 19.11.2014 08:34
Сообщения: 27
к сожалению не работает max() с этим полем. В принципе выражение не воспринимается программой. Из-под аксесса конструтор даже не предлагает по этому полю функции min и max.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2 RMelnyk
СообщениеДобавлено: 19.11.2014 10:26 
Не в сети

Зарегистрирован: 25.01.2012 11:41
Сообщения: 186
checked писал(а):
к сожалению не работает max() с этим полем. В принципе выражение не воспринимается программой. Из-под аксесса конструтор даже не предлагает по этому полю функции min и max.


больше бы конкретики)

select tblActions.StartTime from tblActions where ID = (select max(id) from tblActions Where ClientID = tblMain.ID and tblActions.ActionStatus = 'Состоялось')

Я ж не знаю логики как у вас записи добавляются :) Экспериментируйте.

И вообще странно, что max() не работает. Может ему аллиаса не хватает: попробуйте как то так:
select max(tblActions.StartTime) AS MaxStartTime from tblActions where (((tblActions.ClientID) = tblMain.ID) and tblActions.ActionStatus = 'Состоялось')


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: 2 RMelnyk
СообщениеДобавлено: 19.11.2014 10:49 
Не в сети

Зарегистрирован: 19.11.2014 08:34
Сообщения: 27
база стандартная демоверсии. на стадии экспериментов и настройки под свои нужды.
при неработающем мах(), сдается, что нужно писать что-то сложно-составное: для каждого ClientID сортировать DESC по StartTime и брать TOP 1.
Далее мысль останавливается, т.к. не силен в запросах


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: 2 RMelnyk
СообщениеДобавлено: 19.11.2014 10:57 
Не в сети

Зарегистрирован: 25.01.2012 11:41
Сообщения: 186
checked писал(а):
база стандартная демоверсии. на стадии экспериментов и настройки под свои нужды.
при неработающем мах(), сдается, что нужно писать что-то сложно-составное: для каждого ClientID сортировать DESC по StartTime и брать TOP 1.
Далее мысль останавливается, т.к. не силен в запросах


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: 2 RMelnyk
СообщениеДобавлено: 19.11.2014 11:07 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
RMelnyk писал(а):
если конечно сообщение не удалят и не посчитают за коммерцию.
запросто!
checked писал(а):
Пытаюсь добавить поле "Дата последнего контакта" в таблицу "Клиенты".
Поле вычисляемое по формуле:
(select top 1 tblActions.StartTime from tblActions where (((tblActions.ClientID) = tblMain.ID) and tblActions.ActionStatus = 'Состоялось') order by tblActions.StartTime desc;)
Таблица "Клиенты" становится необновляемой.
Пытаюсь создать вспомогательную виртуальную таблицу qdfLastActionDate, чтобы воспользоваться просто ссылками на ее поля (как рекомендует разработчик)
Подскажите, пожалуйста, как сформировать запрос, чтобы в эту вспомогательную таблицу попадали последние события со статусом "Состоялось" для каждого клиента.
вот зачем засорять форум уточняющими вопросами? Удосужтесь прочитать правила форума и следовать им: приложите скриншот целевой таблицы и окна настроек ее полей

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19.11.2014 11:28 
Не в сети

Зарегистрирован: 19.11.2014 08:34
Сообщения: 27
Пожалуйста, вот скрин.
Стандартная демо-база. Нужно поле в таблице Клиенты вычисляемое из таблицы События как дата последнего события.


Вложения:
таблицы (Small).jpg
таблицы (Small).jpg [ 54.62 КБ | Просмотров: 79148 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19.11.2014 11:48 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Просил скрин окна "Настройка полей", а вы даете окно "Свойства таблицы"...
Запрос на формирование представления qdfLAD:
Код:
SELECT ClientID, ActionStatus, MAX(StartTime) AS LastActionDate FROM tblActions GROUP BY ClientID, ActionStatus


P.S. Я рад, что у вас монитор FullHD, но уважайте и остальных: уменьшайте размеры окон и/или разрешение вставляемых скриншотов для удобства просмотра форума.


Вложения:
2014-11-19 11-50-47 Таблица Даты последний событий по клиентам .png
2014-11-19 11-50-47 Таблица Даты последний событий по клиентам .png [ 31.25 КБ | Просмотров: 79153 ]

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19.11.2014 12:20 
Не в сети

Зарегистрирован: 19.11.2014 08:34
Сообщения: 27
таблица полностью вычисляемая, свойства все из запроса, поэтому, извините, счел достаточным ссылки на источник - стандартную демо-базу.
по Вашему коду запроса у меня не происходит отбора именно максимальных дат. все то же дублирование (см. скрин)


Вложения:
таблица (Small).png
таблица (Small).png [ 17.83 КБ | Просмотров: 79148 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19.11.2014 12:28 
Не в сети

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19.11.2014 12:29 
Не в сети

Зарегистрирован: 25.01.2012 11:41
Сообщения: 186
checked писал(а):
таблица полностью вычисляемая, свойства все из запроса, поэтому, извините, счел достаточным ссылки на источник - стандартную демо-базу.
по Вашему коду запроса у меня не происходит отбора именно максимальных дат. все то же дублирование (см. скрин)



потому что корректно запросы нужно писать:
SELECT ClientID, ActionStatus,
select MAX(bb.StartTime) From tblActions bb Where ClientID = tblActions.ClientID and ActionStatus = 'Состоялось' AS LastActionDate
FROM tblActions GROUP BY ClientID, ActionStatus

Тогда где не состоялось будет пусто.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19.11.2014 12:34 
Не в сети

Зарегистрирован: 19.11.2014 08:34
Сообщения: 27
Спасибо RMelnyk, Спасибо OMEN
Работает с запросом:
SELECT ClientID, ActionStatus, MAX(StartTime) AS LastActionDate FROM tblActions WHERE ActionStatus='Состоялось' GROUP BY ClientID, ActionStatus


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19.11.2014 12:37 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
checked писал(а):
Спасибо RMelnyk, Спасибо OMEN
Работает с запросом:
SELECT ClientID, ActionStatus, MAX(StartTime) AS LastActionDate FROM tblActions WHERE ActionStatus='Состоялось' GROUP BY ClientID, ActionStatus

Изначально нужно правильно формулировать вопрос с корректными исходными данными. В корректно поставленном вопросе на 80% скрыт ответ.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19.11.2014 12:41 
Не в сети

Зарегистрирован: 25.01.2012 11:41
Сообщения: 186
checked писал(а):
Спасибо RMelnyk, Спасибо OMEN
Работает с запросом:
SELECT ClientID, ActionStatus, MAX(StartTime) AS LastActionDate FROM tblActions WHERE ActionStatus='Состоялось' GROUP BY ClientID, ActionStatus


Оно то да, но если у вас полей добавится, то замучитесь вы GROUP BY редактировать.
По возможности лучше избегать его использования. Варианты есть:
1. SELECT distinct ClientID, ActionStatus, MAX(StartTime) AS LastActionDate FROM tblActions WHERE ActionStatus='Состоялось'
2. SELECT ClientID, ActionStatus,
(select MAX(bb.StartTime) From tblActions bb Where ClientID = tblActions.ClientID and ActionStatus = 'Состоялось') AS LastActionDate
FROM tblActions where ActionStatus='Состоялось'


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 30 ]  На страницу 1, 2  След.

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


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

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


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

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