15日のグループ別に月ごとにすべての値を合計するクエリが必要です。グループバイバイの月ごとの日付範囲
しよう:
SELECT sum(price) From table WHERE ADD_DATE(date, INTERVAL 15 DAY);
期待される結果:
Jan Day 1 - 15 = 5.2
Jan Day 16 - 31 = 80.4
Feb Day 1 - 15 = 50
Feb Day 16 - 28 = 80.2
.....
15日のグループ別に月ごとにすべての値を合計するクエリが必要です。グループバイバイの月ごとの日付範囲
しよう:
SELECT sum(price) From table WHERE ADD_DATE(date, INTERVAL 15 DAY);
期待される結果:
Jan Day 1 - 15 = 5.2
Jan Day 16 - 31 = 80.4
Feb Day 1 - 15 = 50
Feb Day 16 - 28 = 80.2
.....
を、私はこれが仕事をすると思う:
SELECT SUM(price) AS price_sum, month_half FROM
(
SELECT price,
IF(
DATEDIFF(`date`, DATE_FORMAT(`date`, "%Y-%m-01")) > 15,
CONCAT(
DATE_FORMAT(`date`, "%b %Y Day 16 - "),
DATE_FORMAT(
DATE_SUB(
DATE_ADD(DATE_FORMAT(`date`, "%Y-%m-01"), INTERVAL 1 MONTH),
INTERVAL 1 DAY), "%d"
)
),
DATE_FORMAT(`date`, "%b %Y Day 1 - 15")
) AS month_half,
`date` AS order_date
FROM table WHERE
`date` >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
) AS t
GROUP BY month_half ORDER BY order_date
何ここで起こることは、私が見つけることDATEDIFFを使用することです月の初めからの日数であるから、月はの日付の値に相当します。 また、DATE_SUBとDATE_ADDを使用して、月の最終日を見つけました(表示上の理由から)。
%Y形式パラメータは、1年を超える日付範囲に渡る場合に追加されます。この場合、月名が繰り返されます。
希望します。乾杯。
これは、基本的に、月の1-15と16-末で抽出されます。 MySQLは
select
CONCAT(DATE_FORMAT(`date`, '%b %Y Day '),
case when dayofmonth(`date`) < 16
then '01-15'
else CONCAT('16-', right(last_day(`date`), 2) )
end) as CharMonth,
sum(price) as TotalPrice
from
invoice
group by
CharMonth
order by
year(`date`),
month(`date`),
min(dayofmonth(`date`))
上記の順序の目的この中で
CharOfMonth TotalPrice
Dec 2011 Day 01-15 226.98
Dec 2011 Day 16-31 108.12
Jan 2012 Day 01-15 983.08
Jan 2012 Day 16-31 235.02
Feb 2012 Day 01-15 271.29
Feb 2012 Day 16-29 382.91
Mar 2012 Day 01-15 900.28
の一例を示すであろう素敵な簡単な関数指定した月の最後の日を返す「LAST_DAY()」を持っています1年に渡る例は2012年前の2011年をすべて保証することです。その後、「月」が「Jan」の前に表示され、さらに01〜15および16-私は明示的に各グループ内のyear()、month()、MINIMUM dayで順序付けしています。つまり、グループ内の一番低い日のデータを強制的に...つまり:1-15対16何でも...
いつも明示的に15日間ですか?そして、どのくらいの期間、あなたが望むのですか...範囲、年?異なるグループ分けの間隔が変わるでしょうか? – DRapp
いつも15日!!!期間の範囲の年、変更グループなし – Igor
1月16-31日は16日ですか?そして2月16-28日は13日間ですか? – ruakh