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