MS Access - функция Max с датой не работает - PullRequest
0 голосов
/ 29 октября 2011

Хорошо, поэтому я создал базу данных, которая позволяет мне отслеживать звонки, сделанные потенциальным клиентам.По сути, пользователь генерирует список вызовов, и после вызова каждого клиента он обновляет поле «Состояние вызова» в одной из моих таблиц на «Достигнут человек», «Занят линия», «Отключенный номер» и т. Д.

Проблема, с которой я столкнулся, заключается в том, что когда я запускаю запрос «Сгенерировать список вызовов» (который я использую для заполнения таблицы «Список вызовов»), я получаю людей, которые уже были достигнуты.У меня есть условие, которое исключает кого-либо со статусом вызова «Человек достиг», но по какой-то причине он не работает.Вот SQL.

SELECT [Telephone Status].Patient_ID, Max([Telephone Status].Date_Called) 
AS [Date Last Called]
FROM [Telephone Status]
WHERE ((([Telephone Status].Call_Status_Details)="Call Back Later") AND
(([Telephone Status].Call_Status)<>"Person Reached"))
GROUP BY [Telephone Status].Patient_ID;

Я подумал, что используя функцию Max с полем Date_Called, я бы исключил людей, которые имеют статус "Достигнут человек" из самого последнего вызова (Макс), ноЯ все еще получаю людей, которые были достигнуты.

Как я могу проверить это условие ("достигнуто лицо") для самой последней записи Date_Called для каждого участника и исключить их, если условие имеет значение "Истина" (человек былдостиг)?

1 Ответ

3 голосов
/ 29 октября 2011

Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю запрос «Создать список вызовов» (который я использую для заполнения таблицы списка вызовов), я получаю людей, которые уже были достигнуты.

А как вы узнали, что это утверждение верно? Я думаю, что вам необходимо проверить данные в таблице [Состояние телефона] ... поля Date_Called, Call_Status_Details и Call_Status для одного из Patient_ID, который был ошибочно включен в список вызовов.

У меня есть условие, которое исключает всех, у кого есть статус вызова «Достигнуто лицо», но по какой-то причине он не работает.

Не совсем ...

SELECT
    ts.Patient_ID,
    Max(ts.Date_Called) AS [Date Last Called]
FROM [Telephone Status] AS ts
WHERE
    ts.Call_Status_Details = "Call Back Later"
    AND ts.Call_Status <> "Person Reached"
GROUP BY ts.Patient_ID;

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

Некоторые способы, которыми «достигнутое лицо» может быть включено в запрос списка вызовов:

  1. Call_Status_Details = "Позвонить позже", но Call_Status это что-нибудь кроме «Достигнутый человек», такой как «Достигнутый человек»; Человек Reachd "; и т. Д.
  2. Запись с Call_Status_Details = "Позвонить позже", более свежая Date_Called чем последний Call_Status = "Человек достиг", но другое допустимое значение для Call_Status.
  3. Индексы для этих полей повреждены.

Первое - это проблема качества данных. Вам необходимо убедиться, что данные постоянно хранятся в соответствии с вашими запросами.

Я не знаю о второй возможности. Это зависит от ваших бизнес-правил и от того, как они выполняются.

Последняя возможность, искажение индекса, в моем опыте встречается редко, но я слышал, что это может произойти. Compact & Repair может это исправить. Более подробную информацию см. В о поврежденных базах данных Microsoft Access Tony Towes .

Редактировать : у вас есть запрос «Создать список вызовов», который заполняет таблицу списка вызовов. Это ситуация, когда таблица списка вызовов может не синхронизироваться с последними обновлениями таблицы [Состояние телефона]. Было бы лучше использовать сам запрос для списка вызовов, а не дублировать (возможно, устаревшую) информацию в отдельной таблице.

...