Php 从mysql数据库中的两个不同行中减去值
我有一个表,有三列,一列是id,其余的包含时间戳值:Php 从mysql数据库中的两个不同行中减去值,php,mysql,sql,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 | 1428
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;
如果ID不正常怎么办?例如,如果将来的时间戳id=1,那么现在的时间戳id=5,而过去的时间戳id=2?以前有没有办法通过时间戳而不是ID对其进行排序?为什么ID不按顺序排列?创建表时,可以使其自动递增ID字段。有关详细信息,请参阅。@randomuser2。如果ID不整齐或有间隙,则不能使用此方法。您的问题表明它们是有序的。sql查询中的开始日期是什么?