我的应用程序让用户将记录输入数据库。记录包含自动递增ID,日期(以mm-dd-yyyy格式的文本),数量(int)和一些其他字段。
我正试图抓住每个月的所有月份和总金额。所以我可以在我的应用程序中显示它们:2010年12月 - 90qty,2011年1月 - 45qty ......
我现在正在做的是,按ID,升序限制1和降序限制1选择日期以获取数据库中的第一个和最后一个日期。然后我分开了几个月和一年并计算了那里有多少个月,然后我做一个for循环并填充一个数组,所以我有12-2010,01-2011,02-2011 ......等然后另一个for循环查询日期在12-01-2011和12-31-2011等之间的总和(数量)数据库
我想知道......有更好的方法吗?
答案 0 :(得分:2)
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
答案 1 :(得分:1)
如果您可以将日期缩小到数据库中所需的粒度,那么您可以执行一次查询并迭代结果。这取决于您的data
列的字段类型。例如,如果它是VARCHAR
,您可以使用SUBSTRING
来挑选您想要的部分(年份和月份)。如果它是DATETIME
你可以做这样的事情:
SELECT strftime(date, '%m-%Y'), SUM(quantity)
FROM table GROUP BY strftime(date, '%m-%Y')