【问题标题】:How to select records without duplicate on just one field Sqlite Android如何仅在一个字段上选择不重复的记录Sqlite Android
【发布时间】:2017-01-22 01:55:17
【问题描述】:

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

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

而Data是这样的

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 和 Cattle type,liter,payment 最好的 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);
}                       

在此先感谢 :) :)

【问题讨论】:

  • 使用GROUP BY
  • 我猜您想显示按 ID 分类的数据,显示 Quantity(Liter in your case)sum 的总和每头牛的付款。如果我理解错了,请纠正我。
  • 是的@Monish Kamble 是的,我想要这样的东西......谢谢
  • @AbhishekPunia :在下面查看我的答案。

标签: java android sql sqlite android-sqlite


【解决方案1】:

考虑到您希望显示按 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】:

    您可以执行以下操作:

    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

    这将以正确的格式为您提供所需的所有记录。只需将其添加到列表中,然后随心所欲地去做。

    【讨论】:

    • 它给出的错误是无法从光标窗口读取第 0 行第 1 列
    • where date &gt; from_date and date &lt; to_date 为什么不WHERE date BETWEEN from_date AND to_date
    • @Abhishek :您是否使用 Java-SQLite 驱动程序触发此查询?如下,stmt = c.createStatement(); ResultSet rs = stmt.executeQuery(SQL 字符串之上);
    • @Rotwang :您可以使用 BETWEEN 或以上方法中的任何一个
    • 猜猜哪个更好?
    【解决方案3】:

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

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

    更多信息请查看link

    【讨论】:

      【解决方案4】:
      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 是数据必须不同的列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-27
        • 2018-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 2012-03-27
        • 2014-04-08
        相关资源
        最近更新 更多