0

データベースからデータを取得するためにカーソルを使用していますが、問題はありません。同じ日付のレコードの数で、1つのレコード日付のみが必要であり、関連する日付のタムが金額フィールドに追加されます。

私は次のようなデータベースレコードを持っています:

Sr    ExpName       Date       Camt  Tamt
---   --------- -----------   ----- -----
1     Pen        10-10-2012      10    10
2     abc        10-10-2012      30    45
3     xyz        11-10-2012      15    55
4     ggg        11-10-2012      20    75
5     aaa        11-10-2012      10    85
6     nnn        11-10-2012      10    95


 dbhelper = new DbHelper(this);
 db = dbhelper.getReadableDatabase();

    Cursor c = db.query(DbHelper.TABLE_NAME, new String[]{"CAST(Date AS DATE)","SUM(Tamt) AS AMT"}, null, null,"CAST(Date AS DATE)", null, null);
    adapter = new SimpleCursorAdapter(this, R.layout.myrow1, c, new String[]{DbHelper.C_Date,DbHelper.C_Tamt},new int[]{R.id.textView3,R.id.textView5} );
    startManagingCursor(c);     
    lstExpense.setAdapter(adapter); 

ここで、myrow1は、出力DATEとAMOUNTを表示するTextView3およびTextVew5フィールドのレイアウトファイルです。

そして、私はこのような出力が欲しいです:

DATE             AMOUNT
------------     ------
10-10-2012          40
11-10-2012          35
12-10-2012          10
13-10-2012          10
4

1 に答える 1

2

これは、 GROUPBYおよびSUM集計関数の問題のように聞こえます。

SQLiteを直接操作する場合、クエリは次の行に沿っている必要があります。

SELECT Date, SUM(Camt) AS Amount FROM Expenses GROUP BY Date;

(データベーステーブルが呼び出されると仮定しましたExpenses。)

これをAndroidカーソルクエリに変換するのはとても簡単です

Cursor c = db.query("Expenses", 
    new String[] { "Date", "SUM(Camt) AS Amount" }, 
    null, null, "Date", null, null, null);

それはあなたが探している結果をあなたに与えるはずです。

于 2012-10-13T11:02:51.493 に答える