2015-03-18 2 views
0

Я записал запрос, который приведен ниже, чтобы извлечь запись из какой-либо таблицы.Разница временных меток Oracle Query

select g.logtekst DESCRIPTION,g.loggruppe loggroup,TO_CHAR(d.logdato, 'MM-DD-YYYY HH24:MI:SS') logdate 
,d.logtype,d.systemnavn,d.rkibrugernr username,d.psp_id customernumber 
from logbasis_Trans d,logtyper g where d.logtype=g.logtype and d.logdato>Sysdate-720 . 

VIR opslag VIR 03-10-2015 09:53:38 250 NTMF CONDLOGB 93939393 
VIR opslag VIR 03-10-2015 13:53:52 250 NTMF CONDLOGB 93939393 
Sog opslag VER 03-10-2015 14:45:30 251 NTMF CONDOLDB 91919191 
Sog opslag VER 03-10-2015 14:45:31 251 NTMF CONDOLDB 91919191 
Sag opslag VIR 03-10-2015 14:45:30 251 NTMF JONDOLDB 95919191 
Sog opslag VJR 03-10-2015 14:45:31 251 NTMF CFNDOLDB 91719191 

В основном это список строк в результате запроса.

Теперь от этого я хочу только такие CustomerNumber (последняя колонка в данном случае), которые имеют все остальные столбцы одинаковы (Log Group) То же, но разница во времени < 1 минуту между этими колоннами.

В этом случае первая и вторая строки являются множественными записями, поскольку метка времени отличается на 1 минуту и ​​3-4 столбца, но не 5 и 6 столбцов.

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

+2

Вы когда-нибудь смотрели аналитическую функцию ЦИИ? –

+0

Я знаю аналитическую функцию. Но для этого требуется более сложный код, отличный от аналитической. –

+1

взгляните на функцию 'LAG' http://oracle-base.com/articles/misc/lag-lead-analytic-functions.php –

ответ

0

использовать это заявление, чтобы получить мельчайшие различия:

(d.logdato - LAG(d.logdato, 1) OVER (PARTITION BY d.psp_id, d.logtype ORDER BY d.logdato))*24*60 AS diff_min

объяснение:
мы получаем logdato из этой строки и вычесть logdato из предыдущего ряда (LAG 1) в группе записей (OVER) с таким же psp_id и logtype (PARTITION BY), заказанным logdato (ORDER BY), в конце мы умножим результат, чтобы получить минуты от дней

+0

спасибо большое, следующий запрос даст мне только уникальные номера клиентов из этих" выберите отдельный пользовательский номер из (выберите g.logtekst DESCRIPTION, g.loggruppe loggroup, TO_CHAR (d.logdato, 'MM-DD-YYYY HH24: MI: SS') logdate , d.logtype, d.systemnavn, d.psp_id customernumber , (d.logdato - LAG (d.logdato, 1) OVER (PARTITION by d.psp_id, d.logtype ORDER BY d.logdato)) * 24 * 60 AS diff_min из logbasis_Trans d, logtyper g где d.logtype = g.logtype и d.logdato> Sysdate-720 группа по d.logtype, g.logtekst, g.loggruppe, d.logdato, d.systemnavn, d.psp_id) где diff_min <= 1 " –

Смежные вопросы