我有一个问题,我似乎无法理解,并希望有人可以帮我一些建议。
自从我的房屋屋顶安装了太阳能光伏电池以来,我一直在发电,并且根据一些(相当慷慨的)激励来做这种事情,为我产生的每千瓦时电力赚钱。看到这是一个数据库项目,我开始编写一些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日的费率。”
理想情况下,我希望查询能够应对多个年度边界,因此,例如,未来几年,我希望能够查询迄今为止产生的绝对总收入。最后,我只想传递查询的开始和结束日期,并返回正确的数字。
答案 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