android - Android Room:选择自定义对象列表,按特定属性删除重复项
问题描述
我正在使用 Room 库来检索没有重复属性“文本”的列表。
这是 MyObjectDao 类中查询的代码:
@Query("SELECT DISTINCT * FROM historyentity WHERE text LIKE :inputText || '%'")
List<MyObject> findByText(String inputText);
我还发布了 MyObject 类:
@Entity
public class MyObject {
@PrimaryKey(autoGenerate = true)
public int uid;
@ColumnInfo(name = "text")
public String text;
@ColumnInfo(name = "timestamp")
public Long timestamp;
}
无论如何,我仍然会得到字段“文本”重复的结果。如何获得不包含字段“文本”重复项的列表?
例如,如果我在数据库中有以下三个元素
database.addMyObject(new MyObject("dog", System.currentTimeInMills());
database.addMyObject(new MyObject("cat", System.currentTimeInMills());
database.addMyObject(new MyObject("dog", System.currentTimeInMills());
当我调用我的查询时,我只想获取前两个元素。
解决方案
如果你只想列出唯一text
值,你可以试试这个:
@Query("SELECT DISTINCT text FROM historyentity WHERE text LIKE :inputText || '%'")
List<String> findByText(String inputText); // <-- changed type to List<String>
更新
您可以尝试此查询(它只获得一个具有text
价值的项目 - 最大id
- 或者您可以使用最大(或最小)timestamp
):
Select * from historyentity as t1
INNER JOIN (select text,max(uid) as uid from historyentity WHERE text LIKE :inputText group by text) t2
ON t1.text = t2.text and t1.uid = t2.uid
推荐阅读
- sql-server - 当 RDLC 报告上的数据集添加时 Visual Studio 2015 崩溃并重新启动
- sql - 如何使用基于 UserAccount ID 的先前值填充 SQL Server 中的 GAP
- java - 尽管指定了正确的主类、类路径等,但 Jar 无法运行
- bash - 终端 -bash:找不到命令错误
- angular - Angular 中的 Angular Material mat-select 动态数据绑定
- c# - 从 C# 将用户定义类型的值作为输入参数传递给 Oracle 中的存储过程
- .net - ORA-01425: 转义字符必须是长度为 1 的字符串
- android - MediaPlayerNative: info/warning (10973, 0) 是什么意思?如何解决?
- hibernate - 使用 mapstruct 映射 Hibernate 实体
- java - JavaFX tableview:默认情况下,顶部单元格在编辑模式下保存来自波纹管单元格的数据