如何在一个字段Sqlite Android上选择无重复的记录

时间:2016-09-14 09:49:23

标签: java android sql sqlite android-sqlite

我有一个包含这样的列的表:

+--------+----+--------+---------------+------- +-------+---------+  
| DATE   | ID | Name   | Cattle Type   |  Liter | Shift | Payment |
+--------+----+--------+---------------+------- +-------+---------+  

数据就像这样

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。其实我需要他们的id和牛类型,升,支付什么是最好的Sqlite命令来做到这一点?

我想要的结果是这样的:

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

提前致谢:):)

4 个答案:

答案 0 :(得分:0)

您可以这样做:

Select ID, Name, Cattle_TYPE, SUM(Liter) as Quantity, SUM(payment) as Total from Table_name where date > from_date and date < to_date group by ID,Name,Cattle_TYPE

这将以适当的格式为您提供所需的所有记录。只需将其添加到列表中,然后执行您想要的操作。

答案 1 :(得分:0)

考虑您要显示按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 的总付款。

答案 2 :(得分:-1)

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

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

有关详细信息,请查看link

答案 3 :(得分:-1)

Cursor cursor = db.query(true, YOUR_TABLE_NAME, new String[] { COLUMN_NAME_1 ,COLUMN_NAME_2, COLUMN_NAME_3 }, null, null, COLUMN_NAME_2, null, null, null);

COLUMN_NAME_2是数据必须与之不同的列。