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

有可能吗?

最佳答案

是,使用联接:

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;

关于php - 从mysql数据库的两个不同行中减去值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29526451/

10-13 07:19