我有一个简单的SQLite数据库,有两列。
Col 1 SimpleDateFormat(“yyyyDDD”)例如2017001(2017年1月1日)
每小时出现2小时
所以每天都有一个独特的代码,每天有24行不同的出现。 如何获取发送到ArrayList(Float)的每一天的出现次数?最终,此ArrayList将填充MPAndroidChart。我用以下代码成功地提取了数据(没有总和)。但是,在我的日期代码的帮助下获得每日金额已经困扰了我好几天。我尝试了GROUP BY和SUM的许多变体,只是每次崩溃。
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;
}
答案 0 :(得分:2)
目前还不清楚你是否想要总和而不是行数,所以假设你只需要总和,那么也许你可以这样做: -
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行): -
以上结果将导致游标包含以下内容: -
请注意!由ORDER BY DESC引起的逆转(所以最新的数据首先)。 即 2017001 ,15 + 20 + 30 + 40 = 105 最后一行。
yNewData会相应地有3个元素: -
yNewData[0]
48 ,yNewData[1]
50 和yNewData[2]
105 。如果您想要一段时间,那么您可以将SELECT更改为: -
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 Fiddle