[英]Select month and sum for all days in month
我的應用程序有用戶將記錄輸入數據庫。 記錄包含一個自動遞增的id,日期(以mm-dd-yyyy格式顯示的文本),一個數量(整數)和其他一些字段。
我試圖獲取所有月份以及每個月的總數量。 這樣我就可以在我的應用中顯示它們,例如:2010年12月-90數量,2011年1月-45數量...
我現在正在做的是,按ID選擇日期,升序限制1和降序限制1以獲取數據庫中的第一個和最后一個日期。 然后我將月份和年份分開,計算其中有多少個月,然后執行for循環並填充數組,這樣我就得到了12-2010、01-2011、02-2011 ...等等,然后是另一個for循環進行查詢總和(數量)數據庫,其中日期在2011年12月1日至2011年12月31日之間,依此類推。
我想知道...還有更好的方法嗎?
CREATE TABLE test (
id integer primary key, date date, quantity integer);
INSERT INTO "test" VALUES(1,'2011-01-01',5);
INSERT INTO "test" VALUES(2,'2011-02-01',13);
INSERT INTO "test" VALUES(3,'2011-02-12',14);
INSERT INTO "test" VALUES(4,'2011-03-01',133);
您可以按月分組並總結這樣的數量。
select strftime('%Y-%m', date), sum(quantity)
from test
group by strftime('%Y-%m', date);
2011-01 5
2011-02 27
2011-03 133
如果可以將日期范圍縮小到數據庫中所需的粒度,則可以執行一次查詢並遍歷結果。 這取決於您的data
列是哪種字段類型。 例如,如果是VARCHAR
,則可以使用SUBSTRING
選擇想要的部分(年和月)。 如果是DATETIME
,則可以執行以下操作:
SELECT strftime(date, '%m-%Y'), SUM(quantity)
FROM table GROUP BY strftime(date, '%m-%Y')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.