选择月份以及该月所有天数的总和

发布于 2024-10-31 18:22:17 字数 409 浏览 0 评论 0原文

我的应用程序让用户将记录输入数据库。这些记录包含自动递增的 ID、日期(以 mm-dd-yyyy 格式的文本)、数量 (int) 和一些其他字段。

我正在尝试获取所有月份以及每个月的总数量。这样我就可以在我的应用程序中显示它们,例如:2010 年 12 月 - 90qty,2011 年 1 月 - 45qty...

我现在要做的是,按 id 选择日期,升序限制 1 和降序限制 1 来获取第一个和最后一个日期在数据库中。然后我分割月份和年份并计算其中有多少个月,然后我执行一个 for 循环并填充一个数组,这样我就有 12-2010、01-2011、02-2011...等,然后另一个 for 循环进行查询sum(quantity) 的数据库,其中日期在 12-01-2011 和 12-31-2011 之间,等等。

我想知道......有更好的方法吗?

My application has users entering records into a database. The records contain an auto-incrementing id, date (as text in mm-dd-yyyy format), a quantity (int) and a few other fields.

I'm trying to grab all the months and the sum quantity for each month. So that I can display them in my app like: Dec 2010 - 90qty, Jan 2011 - 45qty...

What I'm doing now is, selecting date by id, ascending limit 1 and descending limit 1 to get the first and last dates in the database. I then split the months and year and calculate how many months are in there, then I do a for loop and fill an array so I have 12-2010, 01-2011, 02-2011...etc then another for loop to query the database for sum(quantity) where date is between 12-01-2011 and 12-31-2011, etc.

I'm wondering... is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

指尖微凉心微凉 2024-11-07 18:22:17
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
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);

You can group by months and sum up the quantities like this.

select strftime('%Y-%m', date), sum(quantity) 
from test
group by strftime('%Y-%m', date);

2011-01    5
2011-02   27
2011-03  133
泛泛之交 2024-11-07 18:22:17

如果您可以将日期缩小到数据库中所需的粒度,那么您可以执行一个查询并迭代结果。这取决于您的 data 列的字段类型。例如,如果它是 VARCHAR,您可以使用 SUBSTRING 来挑选您想要的部分(年份和月份)。如果它是 DATETIME 你可以这样做:

SELECT strftime(date, '%m-%Y'), SUM(quantity)
FROM table GROUP BY strftime(date, '%m-%Y')

If you can narrow the date to the granularity you want in the database then you can do it one query and iterate over the results. It depends on what field type your data column is. If it's a VARCHAR for example you can use SUBSTRING to pick out the parts you want (year and month). If it's a DATETIME you can do something like this:

SELECT strftime(date, '%m-%Y'), SUM(quantity)
FROM table GROUP BY strftime(date, '%m-%Y')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文