android - 如何在 SQLite 中获取每日总金额

标签 android sqlite android-sqlite

我有一个包含两列的简单 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 行):-

enter image description here

上面的结果将导致光标包含以下内容:-

enter image description here

注意!由于 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/

相关文章:

android - 在删除受影响的行之前识别它们

android - 如何在我的 DAO 中引用可搜索的 FTS4 表而不出现编译器错误?

android - Marshmallow 升级后 appwidget listview 行未更新或加载

python date.min 不会转换回来。为什么?

iOSK : What kind of data type is ABRecordRef?

iphone - 用于复杂报告的 CoreData 对象或 SQL 语句?

android - 从桌面无线上传并在手机上启动 apk 以进行开发

android - 动态创建 Buttons 并设置 onClickListener

android - 如何查询 Room 数据库以使其返回单个对象?

java - 为什么 Room 不从 Assets 中填充数据库?