Android 使用SQLite查询在ListView中只为一个“";历史应用程序“;

Android 使用SQLite查询在ListView中只为一个“";历史应用程序“;,android,sql,sqlite,listview,android-viewbinder,Android,Sql,Sqlite,Listview,Android Viewbinder,我真的不知道该如何恰当地命名这个问题 我有一个包含这些列的sqlite数据库 private final String createDb = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ( " + C_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + DATE + " text, " + SUBCAT + " text, " + ITEM +

我真的不知道该如何恰当地命名这个问题

我有一个包含这些列的sqlite数据库

private final String createDb = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ( "
        + C_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + DATE + " text, "
        + SUBCAT + " text, "
        + ITEM + " text, "
        + PRICE + " integer, "
        + QUANTITY + " integer, "
        + WEIGHT + " integer, "
        + VOLUME + " integer, "
        + SALE + " text, "
        + STORE + " text, "
        + EXTRA + " text) ";
并尝试使用
ViewBinder
调用下面的SQL查询

public String avgPrice() {
        ourHelper = new DbHelper(ourContext);
        db = ourHelper.getReadableDatabase(); 
        String sql = "SELECT AVG(PRICE) as avgprice, ITEM FROM " + TABLE_NAME + " GROUP BY " + ITEM;
        Cursor d = db.rawQuery(sql, null);
我最初有一个包含XML的ListView,每个列都包含一个textview。这只会将每个列从db中拉出1:1。使用适配器很容易。我试图使用
ViewBinder
检测每个输入项目的平均价格(如果存在重复实例,例如不同的日期),并显示该项目的平均价格

本质上,我希望ListView只显示每个项目一次(使用平均价格),当您选择它时,您可以查看每个存储的实例(如历史记录)

在我的位置上,最简单的方法是什么?
假设上面可以使用
ViewBinder
方法(或查询),我如何提取
项目和平均价格(PRICE)
以仅放入一次适当的视图以实现我的“历史记录”功能?

将以下内容添加到数据库的创建字符串中:

+ "UNIQUE(" + COLUMN_NAME + ") ON CONFLICT REPLACE);";

这样,无论您希望其中的列名是唯一的,都将不允许重复,如果在数据库中输入两次,将替换重复的列名。我假设您拥有的某个列可以是唯一的。例如,与项目id类似,因此一次只能添加该项目中的一个,它将在冲突替换上显示最新的with

,在类似“我的项目”列上使用unique以确保只输入一个。那么其他数据呢?你是什么意思?它们会像平常一样被添加,但是基于唯一标识符。是的,我想我不太了解它是如何工作的。如果项目是唯一的(仅允许该类型的1个值),则其他列数据似乎将被覆盖?是的,旧数据将被覆盖。如果您尝试两次添加相同的值,则原始值将被替换。这将是一个问题,因为我需要其他数据保留在应用程序的“历史记录”部分。。。所以我认为这个方法行不通。下面的红色建议在这个项目上使用UNIQUE。我认为这是有道理的。如果我做了一个平均价格列,我可以使用一个类似于我必须在平均价格中输入的查询吗?我该如何计算呢?唯一约束对你没有帮助。新平均值列的想法是在添加新行(使用新价格)或更新价格以重新计算平均值(基于新价格)时使用sqlite触发器更新列。如果我只想获得整个表中每个项目的平均价格,我可以理解如何做,但是我怎么做才能只计算每个独特的项目呢。e、 所有的苹果,所有的橙子等等。我想你可以通过使用触发器中的右WHERE子句来实现这一点,但我不是sqlite专家,所以我不知道该说什么。