Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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_Row - Fatal编程技术网

Php 按日期从MySQL中的另一行中减去行

Php 按日期从MySQL中的另一行中减去行,php,mysql,row,Php,Mysql,Row,我一直在忙一些MySQL,其中有几行数据,我想从前一行中减去一行,并让它一直重复下去。 这是我的桌子: id day vabaraha tagatis kasutajad slot2 17 2017-08-01 592698 80477 108949 33821891 18 2017-08-02 584221 80485 109124 33880051 19

我一直在忙一些MySQL,其中有几行数据,我想从前一行中减去一行,并让它一直重复下去。 这是我的桌子:

id    day          vabaraha   tagatis   kasutajad   slot2    
17    2017-08-01   592698     80477     108949      33821891    
18    2017-08-02   584221     80485     109124      33880051    
19    2017-08-03   591121     77525     109257      33920524    
20    2017-08-04   596247     77111     109269      33921504    
21    2017-08-04   599451     80216     109448      33950284    
22    2017-08-05   600504     79801     109542      33969574    
23    2017-08-06   606778     78750     109618      33982244    
24    2017-08-07   634498     72758     109817      34023524    
25    2017-08-08   621859     79007     109962      34099260    
26    2017-08-09   626617     77321     110092      34166030    
我希望使用php实现echo,如下所示:

id    day          vabaraha   tagatis   kasutajad   slot2      DIFF
20    2017-08-04   596247     77111     109269      33921504   980
19    2017-08-03   591121     77525     109257      33920524   40473
18    2017-08-02   584221     80485     109124      33880051 
我尝试了一些左键连接,但没有找到它。 我的代码:


感谢您的帮助。

您可能想看看另一个使用MySQL@variable usage(如在线程序)按任何标准在行之间按顺序进行的post计数

另一个显示+/-甚至在分组之间工作

我不理解为什么这些特定ID的顺序是相反的,但是你可以根据你的基础对数据进行排序来开始计算,然后@variables就像一个内联程序,它的值可以用于下一个正在处理的记录。我提供的两个例子展示了这一应用的好例子

如果你能澄清你的背景,说明聚合的目的是什么,我可以更好地发布一个更详细的例子。为什么要从ID20、19、18、17开始,然后再从ID21、22、23开始,等等。您要解决的公共元素是什么

从您的示例描述中,我应用了一个查询来尝试使用sqlvariables

SELECT
      pq.*
   from
      ( SELECT 
              o.id,
              o.day,
              o.vabaraha,
              o.tagatis,
              o.kasutajad,
              IF( @lastSlot2 = 0, 0, o.slot2 - @lastSlot2 ) DayDifference,
              @lastSlot2 := o.slot2
           from
              Omaraha o,
              ( select @lastSlot2 := 0 ) sqlvars
           order by
              o.day ) pq
   order by
      pq.Day descending     
因此,在这里,sqlvars查询只准备了两个变量,从没有前面的LastSlot2值开始,因为它表示列表过程的开始。数据按天的顺序按日期顺序预先排序。我首先要检查if。如果slot2没有以前的值,我只返回0。这将是第一次返回的最早日期。考虑该行之后,我现在获取slot2并将其存储到@lastSlot2变量中。现在,通过identifies@lasSlot2的下一条记录有一个值,因此它可以获取当前插槽并检测新记录的差异。每个后续记录都有@lastSlot2=下一个周期该记录的slot2是什么


因为内部查询是按天排序的,所以它会处理所有查询。但是现在,您想要相反的结果,所以我必须将该查询包装到自己的查询中,并从中选择所有内容,但现在,按日期顺序反转,以使最新日期位于列表的顶部。

我每天都在午夜添加新数据,此时slot2会增加。所以,在php中,我想重复一个例子:2017-08-09 slot2-2017-08-08 slot2=66770很抱歉,我之前发布的表错了,现在更正了。将查看您的链接,谢谢。@Elx,如果您错过了其他示例的上下文,请更新查询示例。
SELECT
      pq.*
   from
      ( SELECT 
              o.id,
              o.day,
              o.vabaraha,
              o.tagatis,
              o.kasutajad,
              IF( @lastSlot2 = 0, 0, o.slot2 - @lastSlot2 ) DayDifference,
              @lastSlot2 := o.slot2
           from
              Omaraha o,
              ( select @lastSlot2 := 0 ) sqlvars
           order by
              o.day ) pq
   order by
      pq.Day descending