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

标签 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    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 来回显这样的东西:

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 

我尝试了一些 LEFT JOIN 但无法弄清楚。 我的代码:

  if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

    $mysqltime = date ("Ymd");
    $agotime = date('Ymd', strtotime('-1 days'));
     //echo  $mysqltime. " <br> ";
     //echo $agotime. "<br> ";


   $sql = "SELECT c.day, c.slot2, COALESCE(c.slot2-a.slot2,0) diff
FROM Omaraha c
LEFT JOIN Omaraha a ON a.day < c.day
LEFT JOIN Omaraha b ON a.day < b.day AND b.day < c.day
WHERE b.day IS NULL;";

   mysql_select_db('investee_Omaraha');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   while($row = mysql_fetch_assoc($retval)) {
      echo         
        "EMP NAME : {$row['newAmount']} <br> ".
         "EMP SALARY : {$row['vabaraha']} <br> ".
         "EMP SALARY : {$row['tagatis']} <br> ".
         "EMP SALARY : {$row['slot2']} <br> ".
         "--------------------------------<br>";
   }

   echo "<br><br>!! Fetched data successfully !!\n";

   mysql_close($conn);

谢谢你帮助我。

最佳答案

您可能想看看另一篇文章that does使用 MySQL @variable 使用像内联程序一样按任何标准在行之间顺序计数。

另一个显示 +/- 甚至在组之间工作 that might help you along

我不明白你为什么这些特定的ID按相反的顺序排列,但是你可以根据你的基础来排序你的数据来开始计算,然后@variables就像一个内联程序,并且可以使用它的值正在处理的下一条记录。我提供的两个示例展示了应用此方法的良好示例。

如果您可以澄清聚合目的的上下文,我可以更好地发布更详细的示例。为什么你从 ID 20、19、18、17 开始,然后 ID 回到 21、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 查询仅准备 2 个变量,从没有先前的“LastSlot2”值开始,因为它代表列表过程的开始。数据按天的顺序按日期顺序预先排序。我首先要检查 if() 。如果 slot2 没有先前的值,我只返回 0。这将首先针对第一个返回的最早日期。考虑该行之后,我现在获取 slot2 并将其存储到“@lastSlot2”变量中。现在,通过标识@lasSlot2的下一条记录有一个值,因此它可以获取当前槽并检测新记录的差异。每个后续记录都有 @lastSlot2 = 无论该记录的 slot2 是用于下一个周期的。

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

关于php - 按日期从 MySQL 中的另一行中减去行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45600365/

相关文章:

php - 限制和偏移多对多关系

php - Doctrine/Symfony 乱序生成迁移

python - 删除 pandas 数据框中某些观察结果(时间序列)的简单方法?

Python:将一个数据帧中的值添加到另一个数据帧(具有多个条件)

php - RESTful MVC 应用程序

php - Codeigniter 2.1 - MySQL CONCAT(追加字符串)

mysql - 重置 MySQL root 密码在运行 init-file 时出现错误

php - 如何创建平均分布的三人小组?

mysql - SQL Join - 4 个表或使用一个 View

mysql - 在数据库表行中存储各种数据