我有一个包含两列的简单 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;
}
最佳答案
目前还不清楚您是否想要求和而不是行,所以假设您只想要求和,那么也许您可以这样做:-
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 更改为如下所示:-
从 user_table WHERE ID BETWEEN 2017001 和 2017002 中选择 SUM(OCC) GROUP BY ID ORDER BY ID DESC
其中值 2017001 和 2017002 将根据所需逻辑生成并放入查询字符串中。
在这种情况下,返回的结果数据将是:-
yNewData[0]
将为 50 且yNewData[1]
将为 105。
如果您想要所有中间值以及总和,那么问题会更加复杂,因为实际上您将在一维数组中返回两种类型的数据。
以上作为 SQL Fiddle
以上内容为SQL Fiddle
关于android - 如何在 SQLite 中获取每日总金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46507392/