2016-07-06 5 views
2

商品数量欄のあるテーブルがあり、データベースには1か月に複数のエントリがあります。月単位でデータベーステーブルから合計を選択

形式は日付(YYYY-MM-DD)

Date   Quantity 
2016-03-01 1200 
2016-03-05 200 
2016-04-05 500 
2016-04-10 1000 
2016-05-05 850 
2016-05-10 50 

だから私はデータが欲しい:

  • 月(2016年3月31日に2016年3月1日)= 1400
  • (2016年4月1日2016年4月30日まで)
  • 4月= 1500
  • 月(2016年5月31日に2016年5月1日)= 900

どうすればいいですか?

答えて

1

は、次のクエリを使用し、それはあなたが望む結果を返します欲しいものを返しますであるとして、次のクエリは同じ使用します。

'日付フィールド'は、日付が挿入される列の名前で、Tablenameはテーブルの名前です。

SELECT MONTH(date field) as month , YEAR(date field) as year , SUM(quantity) as 
    quantity FROM Tablename GROUP BY MONTH(date field) 
+0

このクエリは望ましくありません。 'GROUP BY'節にも現れない' SELECT'節に非集合体を含みます。 –

0

quantityフィールドの合計を集計して月と年をグループ化してみることができます。あなたは、実際の日付範囲と派手な出力をしたい場合は

SELECT MONTH(Date), YEAR(Date), SUM(quantity) 
FROM yourTable 
GROUP BY MONTH(Date), YEAR(Date) 

は、それが行うには少しより多くの仕事だろう。これらの日付は元のデータセットには存在しないため、日付表が必要な場合があります。うるう年に2月を扱うことは本当の苦痛かもしれません。

1
select MONTH(Date) As dt , SUM(quantity) total from @Table1 
    GROUP BY MONTH(Date) 
+0

SUM(数量)、SUM(数量)?もしそれが大文字かどうかは関係ありませんか? – unixmiah

+1

@unixmiah全くありません – mohan111

1

あなたはquantityフィールドのSUM、その後、GROUP_BYyear-monthフィールドを選択し、ちょうどyear-month形式にdateフィールドを変換するDATE_FORMATを使用することができます。

SELECT DATE_FORMAT('%Y-%m', `date`) as `ym`, SUM(`quantity`) FROM `table` GROUP BY `ym` ORDER BY `ym` ASC 
0

それはそれはあなたが

SELECT CONCAT(DATE_FORMAT(date,'%b'),' ', 
    (SELECT CONCAT('(',YEAR(date),'-',LPAD(MONTH(date),2,0),'-01 - ') 
), (SELECT concat(last_day(date),')') 
    )) dates, SUM(quantity) qty FROM DATES GROUP BY MONTH(date) ORDER BY MONTH(date) 
+0

フィールドとテーブル名を指定したフィールドとテーブル名に置き換えて再度実行してください。このクエリをテストして正常に動作していますので、正常に動作します。 –

関連する問題