我有一个数据库的列:id,pdate,pvalue1,pvalue2。首先我做一个查询与光标:我应该如何在Sqlite中执行此查询?
Cursor c = ourDatabase.query(DATABASE_TABLE, new String[] { "_id","pdate","pvalue1","pvalue2"},
"pdate >= ? AND pdate <= ?", new String[] { datefrom, dateto }, null, null, null);
这给了我一些行,例如,如果PDATE = 20120318,然后pvalue1 = 58,pvalue2 = 29。这些是字符串,所以我可以给pvalue2赋值“XX”。我想总结给定datefrom和dateto之间的pvalue1,并按pdate将它们分组,其中pvalue2 = XX。我的问题是,我不能把这个条件放入查询中(因为它的工作,像“pvalue2 = XX”..),因为我也需要其他数据。
if (c.moveToFirst())
{
do{
if (c.getString(3).equals("XX")){
Log.i("XX", c.getString(1) + " " + c.getString(2)) + " " + c.getString(3));
}
else {
Log.i("NotXX", c.getString(1) + " " + c.getString(2)) + " " + c.getString(3));
}
while (c.moveToNext());
}
}
这是好到目前为止,这样我就可以用这个日志DATAS其中pvalue2 = XX和NotXX和得到的东西是这样的: (PDATE,pvalue1,pvalue2)20120317,48,29; --- ---; 20120317,21,54; ------- 20120317,11,XX; ----- 20120318,79,71; ------- 20120318,21,XX;
我想做什么?
第一:按pdate对总和(pvalue1)进行分组,并指出它是否为pvalue2为XX或不是XX,所以这样的事情: 20120317,NotXX,69(自48 + 21 = 69)------- - 20120317,XX,11 -------- 20120318,NotXX,79 -------- 20120318,XX,21
在此之后,我想减去NOTXX总和中的XX总和每天。我想得到: 20120317,58(自69-11)------- 20120318,58(自79-21)
我该怎么做? 非常感谢您提前!
许多其他查询包含?在我的项目中,所以它不是问题。例如我可以使用:new String [] {“_id”,“pdate”,“sum(pvalue1)”,}, \t \t \t \t \t“pdate> =?AND pdate <=?”,new String [] {datefrom,dateto},“pdate”,null,null);这给了我每天pvalue1的总和。但我不能使用这个,因为我必须分开XX和Notxx值。 – 2012-03-17 17:39:27
是的,如果您在'selectionArgs'中指定'selection'参数中的'?',但我的意思是将'?'放入'projection'中。它可能工作,但我相信它没有。将需要[准备语句](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#compileStatement%28java.lang.String%29)probaly – zapl 2012-03-17 18:10:01
'db.query(“table”,新的String [] {“_id”,“sum(从表where pdate>?选择pdate作为总和)”},“pdate> =?AND pdate <=?”,new String [] {/ * projection? */datefrom,dateto},null,null,null);'这就是我的意思 – zapl 2012-03-17 18:15:45