SQLite select 按月分组求和

SQLite select sum with monthly group by

我正在网上搜索以找到满足此需求的解决方案: 我需要按月收集 'amout' 个数据组的总和。

我查到的是这个请求:

Cursor cursor = mDb.rawQuery("SELECT strftime('%m', date), SUM(amount) FROM " + DATABASE_TABLE + " GROUP BY strftime('%m', date)", null);

但我很紧张,因为我不能从这个函数中收集任何一个月的数据strftime('%m', date);

我在网上发现这可能来自我的数据库中的日期格式,函数无法理解。

我的数据库中存储的实际日期是:"Thu Dec 01 00:00:00 GMT+00:00 2016"

我用这个游标来检查返回值:

Cursor cursor = mDb.rawQuery("SELECT distinct date, strftime('%m', date) FROM " + DATABASE_TABLE, null);

在游标中(只检查游标的第一次检查)我有:

所以我正确地收集了日期,这是无效的转换。

编辑: 正如提议和解释的那样,我认为函数可能会误解格式(显然是这种情况)。

这是我将日期添加到数据库的方式: 我用这个:dateFormat = new SimpleDateFormat("dd/MM/yyyy");

然后这一行将日期添加到我的 Money 对象中,然后再将其保存到数据库中:dateFormat.parse("01/12/2016")

你能帮帮我吗? 谢谢。

感谢 Rotwang 引导我解决了格式问题,我的问题在我的数据库项目创建者中找到了

当我创建我的对象时,我只是将存储在 class(java.util.Date 日期)中的日期没有格式化。

所以日期总是以错误的格式存储。我必须在创建阶段对其进行格式化。下面是创建我的对象并解决我的问题的代码。

dateFormat = new SimpleDateFormat("yyy-MM-dd"); 再次感谢 Rotwang

并且:

public void createMoney(Money money) {
        ContentValues values = new ContentValues();

        values.put(TITLE, money.get_title());
        values.put(AMOUNT, money.get_amount());
        values.put(DETAILS, money.get_details());
        values.put(DATE, dateFormat.format(money.get_date()));
        values.put(TYPE_FK_ID, money.get_typeFkId());
        values.put(CONTACT_FK_ID, money.get_contactFkId());
        values.put(REMINDER_FK_ID, money.get_reminderFkId());

        mDb.insert(DATABASE_TABLE, null, values);
    }