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

时间:2012-08-16 11:28:29

标签: php mysql

我有一个问题,我似乎无法理解,并希望有人可以帮我一些建议。

自从我的房屋屋顶安装了太阳能光伏电池以来,我一直在发电,并且根据一些(相当慷慨的)激励来做这种事情,为我产生的每千瓦时电力赚钱。看到这是一个数据库项目,我开始编写一些PHP / MySQL来跟踪日常生成,现在有近一年的每日每千瓦时读数,这在一个月内以图形形式很好地呈现给我每月视图,以及每年(按月分组)的图表。

我现在想扩大系统,以货币形式显示收入,而不是电力的千瓦时。目前,这个数字是每千瓦时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日的费率。”

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

3 个答案:

答案 0 :(得分:0)

将生成日期的年份与饲料关税年份联系起来

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月期间匹配饲料年度

答案 1 :(得分:0)

这些内容:

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

答案 2 :(得分:0)

希望这可以做你想要的(测试和工作) SELECT (a.rate*b.reading),a.year as amount from generation as b, feedin as a where Year(b.day)=a.year