0

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

自从在我的屋顶上安装太阳能光伏电池以来,我一直在发电,并且根据一些(相当慷慨的)激励措施来做这种事情,我每发电一千瓦时就赚钱。看到这有点像一个数据库项目,我开始编写一些 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 日)。

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

4

3 回答 3

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 月,这将与饲养年相匹配

于 2012-08-16T11:33:47.600 回答
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
于 2012-08-16T11:35:59.397 回答
0

希望这能满足您的要求(经过测试并正常工作) SELECT (a.rate*b.reading),a.year as amount from generation as b, feedin as a where Year(b.day)=a.year

于 2012-08-16T11:54:23.853 回答