我有一个包含〜三列的表,一个用于id,其余的包含时间戳值:
id | start_date | end_date
我想创建一个查询,它将返回两个彼此相邻的事件之间的区别。到目前为止我写了sql查询:
SELECT start_date, end_date FROM table ORDER BY begin_date asc
现在我不知道如何区分不同的行,例如:
我有三行:
1 | 1428443952 | 1428444010
2 | 1428443952 | 1428443973
3 | 1428443952 | 1428443975
我希望进行一个查询,它将返回
之间的区别(start_date of id2) - (end_date of id1)
(start_date of id3) - (end_date of id2)
etc.
这甚至可能吗?
答案 0 :(得分:1)
是的,使用加入:
select t.start_date - tprev.end_date
from table t join
table tprev
on t.id = tprev.id + 1;
编辑:
以上是最有效的方法,但它假定ID是有序的(如问题所示)。另一种方法是:
select (t.start_date -
(select tprev.end_date
from table tprev
where tprev.end_date < t.start_date
order by tprev.end_date
limit 1
)
) as diff
from table t
having diff is not null;