0

我基本上面临与此线程中描述的相同的问题:http ://www.experts-exchange.com/Database/Oracle/10.x/Q_24693813.html 。不同之处在于我需要使用MYSQL找到解决方案。

我正在处理一个用电量表:

ID     Account   FromDate      ToDate       ElecUse   ElecDemand  ElecBillAmt
2903   100009    2010-10-14    2010-11-12   352400    668.1       12592.53
2904   100009    2010-11-12    2010-12-15   426400    666         14284.39
2905   100009    2010-12-15    2010-01-14   406800    708.4       13812.54
2906   100009    2010-01-14    2010-02-15   443200    697.9       14514.99

我想每月报告一次使用情况,从每个月初开始,到每个月底结束。因此,我想要一个 MYSQL 查询,它可以从上面生成下表:

Account   FromDate      ToDate        ElecUse    ElecDemand    ElecBillAmt
100009    2010-10-14    2010-10-31    206579     391.51        7381.74
100009    2010-11-01    2010-11-30    378402     639.24        13002.12
100009    2010-12-01    2010-12-31    410778     680.46        13859.46
100009    2011-01-01    2011-01-31    425290     701.14        14156.77
100009    2011-02-01    2011-02-15    207750     327           6803.85

感谢您的帮助,丹

4

1 回答 1

0

将列转换为行通常是自联接或联合的工作。

在您的所有示例中,您的 FromDate 是 ToDate 的前一个月。一个查询获取第一个月的天数,另一个查询获取第二个月的剩余天数怎么样?之后在两者之间分配 ElecUse 就很容易了。

根据您的实际数据,您可能需要更多查询(两个日期在同一个月等)。

select fromdate, last_day(fromdate) as todate,
  datediff(last_day(fromdate), fromdate) as days_in_month,
  datediff(todate, fromdate) as days_in_range,
  datediff(last_day(fromdate), fromdate)/datediff(todate, fromdate) as pct_in_month,
  elecuse * (datediff(last_day(fromdate), fromdate)/datediff(todate, fromdate)) as elecuse_in_month
...

我留在了中间列,这样你就可以看到发生了什么:

+------------+------------+---------------+---------------+--------------+------------------+
| fromdate   | todate     | days_in_month | days_in_range | pct_in_month | elecuse_in_month |
+------------+------------+---------------+---------------+--------------+------------------+
| 2010-10-14 | 2010-10-31 |            17 |            29 |       0.5862 |      206579.3102 |
+------------+------------+---------------+---------------+--------------+------------------+

将其与另一个在原始行范围内执行第二个月的查询联合起来,您应该已准备就绪。

不过,请注意@OllieJones 关于 ElecDemand 的警告。

于 2012-11-15T06:07:02.380 回答