Php MySQL将根据日期计算价格变化的太阳能收入

Php MySQL将根据日期计算价格变化的太阳能收入,php,mysql,Php,Mysql,我有一个问题,我似乎无法解决,希望有人能给我一些建议 自从把太阳能光伏电池安装在我的屋顶上以来,我一直在发电,并且根据一些(相当慷慨的)激励措施来做这类事情,我一直在为每千瓦时发电赚钱。考虑到这有点像一个数据库项目,我开始编写一些PHP/MySQL来跟踪每天的发电量,现在有将近一年的每日kWh读数,它们以图形的形式很好地呈现给我,既可以是逐月视图,也可以是年度(分组为月份)图 我现在想扩展系统,以货币形式显示收入,而不是千瓦时的电力。目前,该数字为每千瓦时0.454英镑,但该数字在每年4月1日都

我有一个问题,我似乎无法解决,希望有人能给我一些建议

自从把太阳能光伏电池安装在我的屋顶上以来,我一直在发电,并且根据一些(相当慷慨的)激励措施来做这类事情,我一直在为每千瓦时发电赚钱。考虑到这有点像一个数据库项目,我开始编写一些PHP/MySQL来跟踪每天的发电量,现在有将近一年的每日kWh读数,它们以图形的形式很好地呈现给我,既可以是逐月视图,也可以是年度(分组为月份)图

我现在想扩展系统,以货币形式显示收入,而不是千瓦时的电力。目前,该数字为每千瓦时0.454英镑,但该数字在每年4月1日都会发生变化(之前为0.433英镑)

这是我当前的MySQL结构:

Table feedin:
  year (year4)   rate (float)
  2010           0.433
  2011           0.433
  2012           0.454

Table generation:
  day (DATE)     reading (float)
  2011-12-01     7.682
  2011-12-02     5.747
  2011-12-03     4.982
  ...            ...
  2012-08-13     8.022
  2012-08-14     19.449
  2012-08-15     5.484
我的第一次尝试非常麻烦,PHP和MySQL查询非常混乱,大部分逻辑都是用PHP完成的(我的MySQL技能最多是“有限的”)。然而,随着时间的推移,我发现如果整个事情都在MySQL中完成,那将是非常理想的

我真的不知道如何解决这个问题。我最初的想法是,我们需要选择每年的数据块(日期范围为一年中的4月1日到下一年的3月31日),并将其乘以适当的年利率。“适当年利率是该日期范围开始时适用的利率,即从4月1日起)


理想情况下,我希望查询能够处理多年的边界,因此,例如,几年后,我希望能够查询到迄今为止产生的绝对总收入。最终,我只希望通过查询传递开始和结束日期,它返回正确的数字。

链接生成年份截至上网电价年度的日期

SELECT *, generation.reading*feedin.rate AS profit
 FROM generation, feedin
 WHERE YEAR(generation.day)=feedin.year
但这必须与4月1日的年初有关

SELECT *, generation.reading*feedin.rate AS profit
 FROM generation, feedin
 WHERE YEAR(DATE_SUB(generation.day, INTERVAL 3 MONTH))=feedin.year

这也会将记录的日期向后移动3个月,使其在1-12月而不是4-3月,然后与反馈年相匹配,大致如下:

select year, sum(reading) as total_generation, (total_generation*feedin.rate) 
FROM feedin 
LEFT JOIN generation on feedin.year = YEAR(generation.day)
GROUP BY year

希望这符合您的要求(经过测试并正常工作)
选择(a.rate*b.reading),a.year作为生成的金额作为b,feedin作为where year(b.day)=a.year

year(day)将为您提供所提供数据的年份。将其与feedin表中的年份进行比较/链接。我更倾向于在feedin表中设置startdate和enddate列,而不是简单的年份,这样您就可以更轻松地从生成表连接到feedin表,以获得任何给定dateadd@SU的速率M()和分组计算Waygood(和同位素)的年度总数-看起来几乎完美。然而,我真正想要的是能够在两个提供的日期之间求和,只返回一个总数。就像我说的,我的MySQL还远远不够熟练……你只需要为日期范围添加另一个WHERE子句。例如,和generation.day介于'2001-01-01'和'2002-04-01'之间。2010年电价实际上是针对日期2010-04-01至2011-03-31。测试是否正常?