2014-07-20 3 views
1

Я хотел бы дать последовательность нумерации дублированных recods и caluculate запаздывания по времени и не может сделать этопоследовательность Дубликат таблицы перенумерации

Пример:

id time 

A 12h30 
A 13h45 
A 19h48 
B 8h00 
B 10h12 
C 22h50 
D 9h02 
D 16h46 

Ожидаемый результат запроса

id time sequence lag 

A 12h30  1 0h00 
A 13h45  2 1h15  
A 19h48  3 6h02 
B 8h00  1 0h00 
B 10h12  2 2h12 
C 22h50  1 0h00 
D 9h02  1 0h00 
D 16h46  2 6h44 

Все, что я могу сделать, это перенумеровать непрерывную последовательность с этим запросом

SELECT count(*)as rank, a1.id 


FROM table a1, table a2 

where a1.id >=a2.id 

group by a1 
order by rank, a1.id 

Любая идея наилучшей оценки?

Большое спасибо

ответ

2

Вы можете использовать row_number() для последовательности и lag() вычислить разницу во времени между предыдущей строки

select 
    id, 
    time, 
    row_number() over(partition by id order by time) sequence, 
    (case when (lag(id) over (order by id, time)) = id 
     then time - (lag(time) over (order by id, time)) 
     else 0 
    end) diff 
from mytable t1 
order by id, time 

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

+0

Ровно! yes time column - временная метка экстракта часа + минуты/60, похоже, делает трюк, спасибо – Eddinho

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