2017-10-14 52 views
0

我在查詢數據庫以獲取最近24小時內輸入的值的遊標。我可以查詢並獲取所需的A_VALUE列的所有值,但我無法弄清楚如何以及在哪裏正確編寫子查詢,以便使用where子句參數獲取A_VALUE列的總和並獲取其值。任何想法將不勝感激。 (具有零編碼的背景和我正在學習從這個網站的一切,其他人)SQLite子查詢中where子句中列的總和

//當前代碼來獲取過去24小時內的值是:

String[] projection = { 
      DrinkContract.DrinkEntry._ID, 
      DrinkContract.DrinkEntry.COLUMN_A_VALUE, 
      DrinkContract.DrinkEntry.COLUMN_TIME_DATE}; 

    //code to query databse for last 24 hours 

    String selection = DrinkContract.DrinkEntry.COLUMN_TIME_DATE + " BETWEEN strftime('%s', 'now', '-1 day') AND strftime('%s','now') "; 

    Cursor dayCursor = getContentResolver().query(
      DrinkContract.DrinkEntry.CONTENT_URI, // Provider content URI to query 
      projection,    // Columns to include in the resulting Cursor 
      selection,     // selection clause 
      null, 
      DrinkContract.DrinkEntry.COLUMN_TIME_DATE); // Default sort order*/ 

    if (dayCursor == null || dayCursor.getCount() < 1) { 
     return; 
    } 

    // Proceed with moving to the first row of the cursor and reading data from it 

    while (dayCursor.moveToNext()) { 

     int aValueColumnIndex = dayCursor.getColumnIndex(DrinkContract.DrinkEntry.COLUMN_A_VALUE); 
     int drinkTimeDateColumnIndex = dayCursor.getColumnIndex(DrinkContract.DrinkEntry.COLUMN_TIME_DATE); 

     // Extract out the value from the Cursor for the given column index 
     double aValue = dayCursor.getDouble(aValueColumnIndex); 


     System.out.println("The total a value is " + aValue); 
+0

總和是單個值,並且是從多行計算得出的。查詢中其他兩列的值應該是多少? –

+0

我不需要其他欄目的總和。從我讀過的內容來看,它應該像在SELECT或WHERE子句中添加sum(DrinkContract.DrinkEntry.COLUMN_A_VALUE)或total(DrinkContract.DrinkEntry.COLUMN_A_VALUE)一樣簡單,以獲得該特定列的總和或總數,但我可以似乎沒有得到任何版本的工作。感謝您的回覆 – BSGpegasus

+0

請提供一些樣本數據和您想要的輸出。 (請參閱[如何 格式化堆棧溢出中的SQL表 後?](https://meta.stackexchange.com/q/96125)如何添加一些。) –

回答

0

//工作代碼

String[] projection = { 
     DrinkContract.DrinkEntry._ID, 
     DrinkContract.DrinkEntry.COLUMN_TIME_DATE, 
      "total("+DrinkContract.DrinkEntry.COLUMN_A_VALUE+") AS totalA "}; 

//code to query databse for last 24 hours 

String selection = DrinkContract.DrinkEntry.COLUMN_TIME_DATE + " BETWEEN strftime('%s', 'now', '-1 day') AND strftime('%s','now') "; 

Cursor dayCursor = getContentResolver().query(
     DrinkContract.DrinkEntry.CONTENT_URI, // Provider content URI to query 
     projection,    // Columns to include in the resulting Cursor 
     selection,     // selection clause 
     null, 
     DrinkContract.DrinkEntry.COLUMN_TIME_DATE); // Default sort order*/ 

if (dayCursor == null || dayCursor.getCount() < 1) { 
    return; 
} 

// Proceed with moving to the first row of the cursor and reading data from it 

while (dayCursor.moveToNext()) { 

    int aValueColumnIndex = dayCursor.getColumnIndex("totalA"); 
    int drinkTimeDateColumnIndex = dayCursor.getColumnIndex(DrinkContract.DrinkEntry.COLUMN_TIME_DATE); 

    // Extract out the value from the Cursor for the given column index 
    double aValue = dayCursor.getDouble(aValueColumnIndex); 


    System.out.println("The total a value is " + aValue);