2017-10-14 4 views
0

Je demande la base de données pour obtenir un curseur de valeurs dans les dernières 24 heures entré. Je peux interroger et obtenir toutes les valeurs de la colonne A_VALUE que je veux, mais je ne peux pas comprendre comment ou où écrire correctement la sous-requête pour obtenir la somme de la colonne A_VALUE avec les paramètres de clause where et obtenir sa valeur. Toute réflexion sera apprécié. (Arrière-plan ont un codage zéro et j'apprends tout de ce site et d'autres)SQLite sous-requête somme de la colonne dans où clause

// Code actuel pour obtenir des valeurs dans les dernières 24 heures est:

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

Une somme est une valeur unique et est calculée à partir de plusieurs lignes. Quelle devrait être la valeur des deux autres colonnes de votre requête? –

+0

Je n'ai pas besoin de la somme des autres colonnes. De ce que j'ai lu il devrait être aussi simple que d'ajouter sum (DrinkContract.DrinkEntry.COLUMN_A_VALUE) ou total (DrinkContract.DrinkEntry.COLUMN_A_VALUE) dans les clauses SELECT ou WHERE pour obtenir la somme ou le total de cette colonne spécifique, mais je peux Cela ne semble pas fonctionner. Merci pour votre réponse – BSGpegasus

+0

S'il vous plaît fournir quelques exemples de données et votre sortie désirée. (Voir [Comment mettre en forme des tables SQL dans un post de débordement de pile ?] (Https://meta.stackexchange.com/q/96125) pour savoir comment en ajouter.) –

Répondre

0

// code de travail

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);