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 の前の月です。最初の月の日数を取得する 1 つのクエリと、2 番目の月の残りの日数を取得する別のクエリはどうでしょうか? その後、2 つの間で ElecUse を割り当てるのは簡単です。

実際のデータに基づいて、さらにクエリが必要になる場合があります (2 つの日付が同じ月にあるなど)。

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 |
+------------+------------+---------------+---------------+--------------+------------------+

元の行の範囲で 2 番目の月を実行する別のクエリと UNION を実行すると、すべての設定が完了します。

ただし、ElecDemand に関する @OllieJones の警告に注意してください。

于 2012-11-15T06:07:02.380 に答える