我有一个包含两列的简单sqlite数据库。
Col 1 SimpleDateFormat(“yyyyddd”)例如2017001(用于2017年1月1日)
第2栏每小时发生次数
所以每天都有一个唯一的代码,每天都有24行不同的发生。
如何获取每天发送到arraylist(float)的事件总数?最终,这个arraylist将填充mpandroidchart。我已经用下面的代码成功地提取了数据(没有求和)。但是,通过我的日期代码来获取每日总金额已经好几天没有了。我试过很多不同的分组和求和方法,结果每次都失败了。

public ArrayList<Float> getOccChartData(){
    SQLiteDatabase db = this.getWritableDatabase();
    ArrayList<Float> yNewData = new ArrayList<>();
    String query = "SELECT OCC FROM user_table ORDER BY ID DESC LIMIT 96";
    Cursor c = db.rawQuery(query, null);
    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        yNewData.add(c.getFloat(c.getColumnIndex("OCC")));
    }
    c.close();
    return yNewData;
}

最佳答案

现在还不清楚您是否需要求和而不是行,所以假设您只需要求和,那么也许您可以这样做:

public ArrayList<Float> getOccChartData(){
    SQLiteDatabase db = this.getWritableDatabase();
    ArrayList<Float> yNewData = new ArrayList<>();

    String query = "SELECT SUM(OCC) AS OCC FROM user_table GROUP BY ID ORDER BY ID DESC"

    Cursor c = db.rawQuery(query, null);
    while(c.moveToNext) {
        yNewData.add(c.getFloat(c.getColumnIndex("OCC")));
    }
    c.close();
    return yNewData;
}

例子
例如,假设您的表具有(为简洁起见,不是每个表24行):。-
android - 如何在SQLite中获取每日金额-LMLPHP
上述操作将导致光标包含以下内容:
android - 如何在SQLite中获取每日金额-LMLPHP
注意!由于按描述排序而导致的冲销(因此首先是最新数据)。
即,对于2017001,15+20+30+40=105最后一行。
ynewdata将相应地有3个元素:
yNewData[0]是48,
yNewData[1]将是50并且
yNewData[2]将是105。
其他考虑因素
如果您需要一段时间,那么您可以将选择更改为:
SELECT SUM(OCC) FROM user_table WHERE ID BETWEEN 2017001 AND 2017002 GROUP BY ID ORDER BY ID DESC
其中值2017001和2017002将根据所需逻辑生成并放入查询字符串中。
在这种情况下,返回的结果数据将是:
yNewData[0]将是50并且
yNewData[1]将是105。
如果您想要所有中间值以及总和,那么问题会更复杂,因为实际上您是在一维数组中返回两种类型的数据。
上面是一个sql小提琴
以上是aSQL Fiddle

09-25 18:32