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
我想知道如何按id_person
分组第一笔交易的internation_out
与下一笔交易的internation_in
之间的差异(小时数)。
我使用滞后和线索进行探测,但我无法按id_person
我希望使用id_person 4作为结果
id_person交易差距
4 4564646 Null
4 4564656(2015-02-04-2015-03-01)的结果 4 87899465(2015-04-15-2015-05-16)的结果
答案 0 :(得分: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
。