2

//こんにちは、私はこのmysqlテーブルを持っています

id    price     startDate     endDate

1     200       2012-01-10   2012-03-15 
2     250       2012-02-15   2012-03-18 
3     100       2012-02-11   2012-02-20 
4     260       2012-03-22   2012-04-15 

私が望むのは、月ごとの間隔でサブスクリプションによる収益の合計額を取得することです。これにより、この出力は次のようになります。

201201    200
201202    550     //(250 + 200 + 100)
201203    710     //(260 + 200 + 250)
201204    260

これに対する私自身の解決策は、多くのphpループと一時変数に基づいていますが、もっと良い方法が必要だと思いますか?

4

3 に答える 3

0

もう一度試してみますが、これには複数のクエリがあります。

$totalMonths = ($maxDateYear - $minDateYear) * 12 - $minDateMonth + $maxDateMonth;
$year = $minDateYear;
$month = $minDateMonth;
$st = $pdo->prepare("SELECT SUM(price) FROM table WHERE startDate < ? and endDate >= ?");

for ($i = 0; $i < $totalMonths; $i++) {
    $date1 = "$year-$month-01";
    if (++$month > 12) { $month = 1; $year++; }
    $date2 = "$year-$month-01";
    $st->execute(array($date2, $date1));
    echo "$date1: " . $st->fetchColumn();
}
于 2012-11-28T12:31:55.953 に答える
0

集計関数を使用し、次のようにグループ化します。

SELECT SUM(price), endDate FROM table GROUP BY endDate;
于 2012-11-28T11:10:35.410 に答える
0

これは正しいトリックを行うと思います

SELECT YEAR(startDate)year, MONTH(startDate)month, SUM(price)price FROM table GROUP BY MONTH(startDate)
于 2012-11-28T11:28:00.167 に答える