2015-04-15 10 views
2

Как разрешить допуск в течение 1 - 10 секунд?Как присоединиться к столбцам временной отметки с допуском

У меня есть 2 таблицы, которые имеют временные метки, но отключены на 1-10 секунд. Я использую внутреннее соединение для их сравнения. У меня есть номера телефонов (столбцы) в обеих таблицах, которые совпадают, но не могут совместить их с отметками времени (только время). Чтобы разрешить определенный допуск, я мог бы использовать выражение типа cast(DateCreated as Time) = cast(TIMESTAMP as time) + 5. Но я не хочу делать это каждую секунду.

SELECT Time_To_Sec(cast("table1_DateCreated" as time)) as DateCreated 
    , Time_To_Sec(cast("table2"."Timestamp" as time)) as Timestampe 
    , "Direction","FromTW", "ToTW", "table2"."ANI","table2"."CALL ID" 
    , "table2"."Disposition" 
FROM "calls and time" 
INNER JOIN "table2" on cast(DateCreated as Time)=cast(TIMESTAMP as time)+5 
        and FromTW="table2"."ANI" 

Я хотел бы видеть следующие результаты, если возможно:

table1(DateCreated) | table2(Timestamp) | compared results 
---------------------+---------------------+----------------- 
5000     | 5005    | table3 
5001     | 5009    | table3 
5001     | 5050    | not in table3 

Если условие выполнено, то он будет отправлен в таблице 3, но если не удовлетворяет условию тем он не будет отправлено в таблицу 3.

Использование отчетов Zoho, поэтому я не уверен, какую базу данных они используют. Postgres, MySQL и т.д.

+1

Postgres или MySQL? Это не может быть одновременно. –

+0

Я не знаю, что отчет ZOHO больше нравится, но mysql работает большую часть времени. давайте попробуем Mysql –

ответ

2

Если временные метки в обоих таблиц могут быть off by 1-10 seconds, то логически следует что максимальный допуск для матча 20 sceonds (+/- 10 с каждой стороны).

Испытано в Postgres:

SELECT * 
FROM "calls and time" t1 
JOIN table2 t2 ON t2."TIMESTAMP" BETWEEN t1."DateCreated" - interval '20 sec' 
             AND t1."DateCreated" + interval '20 sec'; 
WHERE t1."FromTW" = t2."ANI" -- FromTW or "FromTW" ? 

Это sargable выражение, которое позволяет использовать индекс на x:

x BETWEEN y - interval '20 sec' 
     AND y + interval '20 sec' 

"calls and time", "TIMESTAMP", "FromTW" являются крайне неудачные идентификаторы, кстати. Придерживайтесь юридических, неупомянутых имен, чтобы сохранить некоторые проблемы.

0

Проверить абсолютная разность двух временных меток, which'd быть в псевдокоде:

if (abs($timestamp1 - $timestamp2) <= $tolerance) { ... } 
+0

Я вижу логику. Я это попробую. –