我有一个包含两列的简单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行):。-
上述操作将导致光标包含以下内容:
注意!由于按描述排序而导致的冲销(因此首先是最新数据)。
即,对于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