Вопрос связан с информацией о телефонии, хотя я использую Genesys http://www.genesyslab.com,, но я предпочел разместить здесь вопрос, потому что это вопрос, связанный с SQL. У меня есть две таблицы:
(Таблица 1: " CallerID ") Одна таблица, содержащая CallerID и ConnID (идентифицирует вызов).
(Таблица 2: " Callinfo ") Другая таблица содержит, помимо прочего, CallerID, дату входящего вызова (хранится в формате int
с возможностью его перевода ) и строка состояния, которая соответствует действию, которое я объясню ниже. Один пример строки
ConnID StartTime Status
--------------------- ----------- -----------
30119914212527698 1300286888 2
Каждый раз, когда поступает вызов, обе таблицы обновляются.
Что мне нужно сделать, это получить все звонки, которые поступили в последние два дня со статусом 2 или 4 (это звонки, на которые не был дан ответ) из Callinfo
и получить CallerID из таблицы CallerID
.
После этого мне нужно проверить, есть ли у того же CallerID новые регистры в таблице Callinfo, проверяя его ConnID. Если эти новые регистры имеют статус, отличный от 2 o 4 (означает успех в обмене данными), я должен удалить CallerID первого запроса.
Цель запроса - вызвать тех клиентов, которые пытались позвонить в течение последних двух дней, но не смогли.
Первый запрос работает нормально, вы должны игнорировать функцию DATEDIFF.
DECLARE @twoDays BIGINT
SET @twoDays = 172800 --48hs expressed in seconds
SELECT DISTINCT ConnID, StartTime, CID.CallerID, Status FROM Callinfo
INNER JOIN dbo.CallerID CID
ON Callinfo.ConnID = CID.ConnID
WHERE
(Status = 2 OR Status = 4)
AND
StartTime > DATEDIFF(second, '1970-01-01 00:01:00', GETUTCDATE())- @twoDays
Я не знаю, как использовать результаты и проверять, есть ли новые звонки со статусом, отличным от 2 и 4.
Я работаю на SQL Server 2005.
Следующая последовательность может проясниться:
Если с вызывающим абонентом A такая ситуация:
1/1 12pm: A call OK
1/1 1pm: A call FAIL
тогда я должен получить результат. Но если ситуация такова:
1/1 12pm: A call OK
1/1 1pm: A call FAIL
2/1 12pm: A call OK
тогда я не должен получить A в результате. Таким образом, когда я проверяю 3/1, я не получу результат, потому что последний вызов от A был в порядке, а 4/1 вызывающий абонент A не должен появляться в первом запросе.