Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从mysql数据库中的两个不同行中减去值_Php_Mysql_Sql - Fatal编程技术网

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

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,其余的包含时间戳值:

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查询中的开始日期是什么?