从mysql数据库中的两个不同的行中减去值

时间:2015-04-08 22:28:17

标签: php mysql sql

我有一个包含〜三列的表,一个用于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.

这甚至可能吗?

1 个答案:

答案 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;