2015-04-21 75 views
0
id_person transaction internation_in internation_out 
1   456465  2015-01-01  2015-02-01 
2   564564  2015-02-03  2015-04-02 
3   4564654 2015-01-01  2015-01-05 
4   4564646 2015-01-01  2015-02-04 
4   4564656 2015-03-01  2015-04-15 
4   87899465 2015-05-16  2015-05-25 
5   56456456 2015-01-01  2105-01-08 
5   45456546 2015-02-04  2015-03-04 

我想知道如何从下一个交易的internation_in第一交易internation_out之间通过id_person的差异(时间间隔以小时为单位)组。检测间隔

I探针与滞后而导致,但我不能按id_person

我想用id_person 4例如

id_person交易峡
4 4564646空

4 4564656所述的这种结果结果(2015-02-04- 2015-03-01)
4 87899465结果(2015-04-15- 2015-05-16)

+1

请编辑您的问题,并提供样品结果。 –

回答

0

如果你的时间段不重叠(而你的时间段不重合),那么间隙的简单计算就是:从开始到结束的总天数减去每一行的总数。所以,你不需要lead()lag()

select id_person, 
     (case when count(*) > 1 
      then (max(internation_out) - min(internation_in) - 
        sum(internation_out - internation_in) 
       ) 
     end) as gap_duration 
from table t 
group by id_person; 

注意,这如果只有一个人行,返回NULL。如果你想0,那么你不需要case

+0

我编辑我的问题 – Frechi