设计了一张表,三个属性,一个为ID,一个为Location,一个为Feature,没有设置约束,只要三列的值不完全一样即可.现在我要按照ID分组,然后每组取出一行,这一行必须满足的条件为该行在所在组的Location值为最小,请问该怎么做.下面是几次失败的尝试Cursor c=read.query(DatabaseHelper.TABLENAME_2,
new String[]{"ID","Location","Feature","MIN(Location) "},null,null,"ID","Location=Min(Location)","ID ASC");//取出所有病毒的第一段特征码.
Cursor c=read.query(DatabaseHelper.TABLENAME_2,
new String[]{"ID","Location","Feature","MIN(Location) M"},null,null,"ID","Location=M","ID ASC");//取出所有病毒的第一段特征码
我希望使用query方法来达成目的.SQLiteJava分组 取最小 query 

解决方案 »

  1.   

    为什么不尝试用sql语句去做,query不也是对sql语句的实现么
      

  2.   

    不一定可以用sql语句的    有时候读取别的程序的数据库就不能用sql语句了   不过看楼主的代码看来是读取自己的数据库了   那直接查询sql语句即可 这样子就免去了程序拼接sql语句的麻烦了  运行更快Cursor c = read.execSQL("select ID,Location,Feature,Location from "+DatabaseHelper.TABLENAME_2+";");
      

  3.   

    select  ID, min(location) from xxx group by ID;
      

  4.   

    这样去重之后倒是可以得到一行,但是没有读出Feature那一列;可是如果加上Feature的话,结果就是每个Feature都有一行,并且除了Feature自己这一列,其他两列的值是相等的。然后我想知道,是不是换一个写法直接查询SQL就能够实现了。如下:(聚合函数这么写应该没有错误吧)
    Cursor c = read.execSQL("select ID,Location,Feature from "+DatabaseHelper.TABLENAME_2+"GroupBy ID ASC Having Location=MIN(Location)");