2016-07-06 59 views
2

我有一個表中有產品數量列,並且數據庫在一個月內有多個條目。從數據庫表中選擇基於月份的總計

日期格式(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月1日至2016年3月31日)= 1400
  • 四月(2016年4月1日至2016年4月30日)= 1500
  • 月(2016年5月1日至2016年5月31日)= 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

這個查詢是不可取的,因爲它包含'SELECT'子句中的非聚合,它們也不出現在GROUP BY子句中。 –

0

您可以嘗試按月份和年份進行分組,並將quantity字段的總和作爲合計。

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

如果你想要帶有實際日期範圍的奇特輸出,那將需要做更多的工作。這些日期可能不存在於您的原始數據集中,因此可能需要日期表。在閏年處理二月可能是一個真正的痛苦。

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

SUM(quantity),SUM(Quantity)?它是否在大寫字母中是否重要? – unixmiah

+1

@unixmiah根本就沒有 – mohan111

1

您可以使用DATE_FORMATdate字段轉換隻是year-month格式,選擇quantitySUM,然後GROUP_BYyear-month領域。

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

用查詢中給定的字段和表名替換你的字段和表名,然後再次運行,它會正常運行,因爲我測試了這個查詢並且工作正常 –

相關問題