【问题标题】:php Mysql subtraction of a previous indexphp Mysql减去前一个索引
【发布时间】:2022-07-30 23:00:58
【问题描述】:

我正在制作一个项目,它接收来自用水户的数据,然后我使用 chart.js 在图表中显示这些值。问题是我必须在查询中进行一些计算。

我已经完成了第一个,即读数指数除以每单位脉冲数 (/1000)

但我还是要做另一个就是下一个索引减去旧索引,基本上是 OldIndex = (IndexReleve/ImpParUnit) 所以 (NewIndex - OldIndex )

但是同一个查询中的所有内容我都有问题,我不知道是否有解决方案......

提前感谢您的帮助

输入数据示例 oldindex = 343.32 NewIndex = (IndexReleve/ImpParUnit) - oldindex = 471.56 - 343.32 = 128.24

OldIndex = 128.24 NewIndex = (IndexReleve/ImpParUnit) - oldindex = 921.56 - 128.24 = 793.32 等等……

Releves = 从用水户处收到的值 就位=每个用水者的地方,因为有不同的公园

SELECT 
   ROUND((IndexReleve/ImpParUnit),2) As IndexReel,
   CONCAT(DATE_FORMAT(DateHeure, '%d/%m/%Y'), 
   '\n', 
   DATE_FORMAT(DateHeure,' %H:%i:%s') ) as DateHeure 
FROM Releves,Emplacements

【问题讨论】:

  • 您能否提供输入数据列表以及IndexReel 的预期值,这可能会使您的问题更清楚?
  • 而且使用的表的定义(RelevesEmplacements)也很好。以及关于这两个表如何相关的信息。
  • @Luuk 谢谢你的消息,我用输入数据的例子和表格的定义编辑了帖子
  • 当你有时间时,(在问另一个问题之前????),请阅读:How do I format my posts using Markdown or HTML?How do I ask a good question?

标签: php mysql


【解决方案1】:

你的情况可以试试

select 
   t.IndexReel,t.IndexReel-LAG(t.IndexReel,1) over() as whatuwant,
   ROUND((IndexReleve/ImpParUnit),2) As IndexReel,
   CONCAT(DATE_FORMAT(DateHeure, '%d/%m/%Y'), 
   '\n', 
   DATE_FORMAT(DateHeure,' %H:%i:%s') ) as DateHeure 
FROM Releves,Emplacements) t 

没有LAG试试这个:

select DateHeure,ANY_VALUE(IndexReel),ANY_VALUE(whatuwant) from ( 
    select ANY_VALUE(DateHeure) as DateHeure,ANY_VALUE(IndexReel) as IndexReel,sum(IndexReel) as whatuwant from (
        select @index:=@index +1 as idx,t.IndexReel,'\n',t.DateHeure from (SELECT 
   ROUND((IndexReleve/ImpParUnit),2) As IndexReel,
   CONCAT(DATE_FORMAT(DateHeure, '%d/%m/%Y'), 
   '\n', 
   DATE_FORMAT(DateHeure,' %H:%i:%s') ) as DateHeure 
FROM Releves,Emplacements) t,(select @index:=0) r UNION ALL     
        select @index2:=@index2 +1 as idx,0-t.IndexReel as IndexReel,'\n',t.DateHeure from (SELECT 
   ROUND((IndexReleve/ImpParUnit),2) As IndexReel,
   CONCAT(DATE_FORMAT(DateHeure, '%d/%m/%Y'), 
   '\n', 
   DATE_FORMAT(DateHeure,' %H:%i:%s') ) as DateHeure 
FROM Releves,Emplacements) t,(select @index2:=1) r
    ) t group by idx 
) t group by DateHeure

【讨论】:

  • 感谢您的评论,但在工作中他们使用 phpmyadmin 的第 5 版并且不支持延迟功能...
  • 嗯,如果你不能使用LAG,试试这样:select id,ANY_VALUE(score),ANY_VALUE(whatuwant) from ( select ANY_VALUE(id) as id,ANY_VALUE(score) as score,sum(score) as whatuwant from ( select @index:=@index +1 as idx,t.id,t.score from (select p.id,p.score from posts p) t,(select @index:=0) r UNION ALL select @index2:=@index2 +1 as idx,t.id,0-t.score as score from (select p.id,p.score from posts p) t,(select @index2:=1) r ) t group by idx ) t group by id;只需将你的查询替换为select p.id,p.score from posts p,它将结果与不同的索引合并并使用总和来减去跨度>
  • 我在我的答案中发布了整个查询,你可以试试
猜你喜欢
  • 2023-03-20
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
相关资源
最近更新 更多