Java 如何选择记录而不在一个字段上重复

Java 如何选择记录而不在一个字段上重复,java,android,sql,sqlite,android-sqlite,Java,Android,Sql,Sqlite,Android Sqlite,我有一个包含如下列的表: +--------+----+--------+---------------+------- +-------+---------+ | DATE | ID | Name | Cattle Type | Liter | Shift | Payment | +--------+----+--------+---------------+------- +-------+---------+ ID : 1 Cow = 4.00 Litre R

我有一个包含如下列的表:

+--------+----+--------+---------------+------- +-------+---------+  
| DATE   | ID | Name   | Cattle Type   |  Liter | Shift | Payment |
+--------+----+--------+---------------+------- +-------+---------+  
ID : 1 
Cow  = 4.00 Litre  Rs 100 
Buff = 2.00 Litre  Rs 50
Total = Rs 150 

ID : 2
Cow  = 0.00 Litre  Rs 0.0 
Buff = 1.00 Litre  Rs 25
Total = Rs 25
数据是这样的

9-9-2016 |  01  | Abhi  | Cow | 2 | AM | 50 |
9-9-2016 |  02  | Ram   | Buff | 1 | AM | 25 |
9-9-2016 |  01  | Abhi  | Buff | 2 | PM | 50 |
9-9-2016 |  01  | Abhi  | Cow | 2 | PM | 50 |
我通过在数据库函数中传递日期来获取所有数据 例如:-

databaseObject.getAlldata(String From_date, StringTo_date)
之后,我从数据库中获取所有值,并将其存储到列表中

我需要没有任何副本的身份证。事实上,我需要他们的id和牛的类型,升,付款什么是最好的Sqlite命令来做这件事

我想要的结果是这样的:

+--------+----+--------+---------------+------- +-------+---------+  
| DATE   | ID | Name   | Cattle Type   |  Liter | Shift | Payment |
+--------+----+--------+---------------+------- +-------+---------+  
ID : 1 
Cow  = 4.00 Litre  Rs 100 
Buff = 2.00 Litre  Rs 50
Total = Rs 150 

ID : 2
Cow  = 0.00 Litre  Rs 0.0 
Buff = 1.00 Litre  Rs 25
Total = Rs 25
我的代码是:

list1 = db.getAllMilkCollection(start, end);

try {
    for( i = 0; i < list1.size(); i++) {
        CattleTypeCowTotal = 0;
        CattleTypeBuffTotal = 0 ;
        String id = list1.get(i).member_code;

        list2 = db.getAllDataOfPaymentRegister(start,end,id);

        for( j = 0; j < list2.size(); j++) {
            String member_name = list2.get(j).member_name;  
            String Cattle_type = list2.get(j).cattle_type;

            if(Cattle_type.equalsIgnoreCase("Cow")){
                String amount = list2.get(j).amount.trim();   
                if(amount!=null){
                    CattleTypeCowTotal += Float.parseFloat(amount);
                }
            }

            if(Cattle_type.equalsIgnoreCase("buff")){
                String amount = list2.get(j).amount.trim();   
                if(amount != null){
                    CattleTypeBuffTotal  += Float.parseFloat(amount);
                }
            }
        }
        System.out.println("xxxxxxxxxxxxxxxxxxxx");
    }

} catch (Exception e) {
    Log.e("Error", ""+e);
}                       
list1=db.getAllMilkCollection(开始,结束);
试一试{
对于(i=0;i

提前感谢:):)

SQLite DISTINCT关键字与SELECT语句结合使用,以消除所有重复记录并仅获取唯一记录

当一个表中有多条重复记录时,可能会出现这种情况。在获取此类记录时,只获取唯一记录而不是获取重复记录更有意义

有关更多信息,请查看


COLUMN\u NAME\u 2是数据必须不同的列。

您可以执行以下操作:

选择ID、名称、牛的类型、数量(升)和总数(付款)
从表\u名称
其中日期>起始日期
和日期<截止日期
按ID、名称、类型分组



这将以适当的格式为您提供所需的所有记录。只需将其添加到列表中,然后想做什么就做什么。

考虑到您希望显示按照ID分类的数据,显示每头牛的数量总和(在您的情况下为公升)和付款总额

1.使用下面的查询获取按ID分类的每头牛的数量和付款总额的数据

select ID, Cattle_type, sum(Liter) as Quantity, sum(Payment) as Total from ABC 
where Date between "2016-09-09" and "2016-09-10"
group by Cattle_type, ID;
2.创建一个模型类,并将上述查询的结果存储到其中

3.将模型类的对象添加到ArrayList中


我认为,从这里您可以设法显示按ID分类的数据,并获得每个ID的总付款。使用
分组方式
。我猜您希望显示根据ID分类的数据,显示数量总和(在您的情况下为升)和每头牛的付款总额。如果我理解错了,请纠正我。是的@Monish Kamble是的,我想要那样的东西。。thanks@AbhishekPunia:检查我下面的答案。它给出的错误是无法从游标窗口读取第0行第1列
where date>from_date和date
为什么不
where date from_date和to_date之间的日期
?@Abhishek:您是用Java SQLite驱动程序启动此查询的吗?如下所示,stmt=c.createStatement();ResultSet rs=stmt.executeQuery(在SQL字符串上方)@Rotwang:你可以在两种或两种以上的方法之间使用,猜猜哪一种更好?