下面是一段很简单的代码,就是想从DxfsCheckitem中查找出满足check_item不重复的记录。也许这不是个难题,不过还是让自己花了点时间。其实要不用hibernate的话,用distinct就太简单了。
尝试一 :
最开始想通过distinct来获取数据的,因为Hibernate支持distinct。于是乎 写了HQL如下:
String strSql= "select y.check_id , distinct y.check_item from DxfsCheckitem y ";
当然了 满足需要的数据是找出来了,但是要想显示出来恐怕要花点功夫。于是想改其他方式。
尝试二:
通过复合的SQL语句,于是乎 开始写的HQL如下:
String strSql= "from DxfsCheckitem y where y.check_id in (select max(x.check_id)from DxfsCheckitem x group by x.check_item)";
怎么看都没问题的SQL 语句,就是出了问题,一直报错,具体错误忘了记录了。其实开始让我怀疑是不是hibernate不支持MAX()或者不支持in 什么的。不过查阅资料发现这些都可以的。
无果之后,总觉得不甘!就试着修改一些地方。发现下面的写法可以得到自己满意的结果。
view plaincopy to clipboardprint?
public List getDxfsCheckitemList() {
Session session = null;
String strSql= "from DxfsCheckitem y where (y.check_item,y.check_id)in(select x.check_item,max(x.check_id)from DxfsCheckitem x group by x.check_item)";
session = this.getHibernateTemplate().getSessionFactory().openSession();
Query query = session.createQuery(strSql.toString());
/ 获得记录集总数
List list = query.list();
return list;
}
public List getDxfsCheckitemList() {
Session session = null;
String strSql= "from DxfsCheckitem y where (y.check_item,y.check_id)in(select x.check_item,max(x.check_id)from DxfsCheckitem x group by x.check_item)";
session = this.getHibernateTemplate().getSessionFactory().openSession();
Query query = session.createQuery(strSql.toString());
// 获得记录集总数
List list = query.list();
return list;
}
知道 group by后面的字段必须是 前门select 选出的某个字段,
分享到:
相关推荐
有这样的一个需求:select count(distinct nick) from user_access_xx_xx; 这条sql用于统计用户访问的uv,由于单表的数据量在10G以上,即使在user_access_xx_xx上加上nick的索引, 通过查看执行计划,也为全索引扫描...
【DISTINCT】优化之MySQL官方文档翻译
主要介绍了MySQL DISTINCT 的基本实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
mysql distinct 语句的应用详解...
用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
mysql中distinct用法【SQL中distinct的用法】.docx
首先对于MySQL的DISTINCT的关键字的一些用法: 1.在count 不重复的记录的时候能用到,比如SELECT COUNT( DISTINCT id ) FROM tablename;就是计算talbebname表中id不同的记录有多少条。 2,在需要返回记录不同...
distinct支持单列、多列的去重方式。 单列去重的方式简明易懂,即相同值只保留1个。 多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。 group by使用的频率...
MySQL Distinct 去掉查询结果重复记录 DISTINCT 使用 DISTINCT 关键字可以去掉查询中某个字段的重复记录。 语法: SELECT DISTINCT(column) FROM tb_name 例子: 假定 user 表有如下记录: uid username 1 小李...
主要介绍了MySQL关键字Distinct的详细介绍的相关资料,需要的朋友可以参考下
使用distinct在mysql中查询多条不重复记录值的解决办法 在 MySQL 中,使用 distinct 关键字可以过滤掉重复记录,只保留一条。但是,这个关键字只能返回它的目标字段,而无法返回其它字段。这使得在查询多条不重复...
2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装...
同样可以通过松散索引扫描或者是紧凑索引扫描来实现,当然,在无法仅仅使用索引即能完成 DISTINCT 的时候,MySQL 只能通过临时表来完成。但是,和 GROUP BY 有一点差别的是,DISTINCT 并不需要进行排序。也就是说,...