java - 坚持使用 sql/hql 查询组

标签 java sql oracle hql

id          device_id   config_status   update_finished
1           5015001     SUCCESS     11-OCT-2012
2           5015001     SUCCESS     23-OCT-2012
3           5015001     PENDING     23-OCT-2012
4           5015001     PENDING     23-OCT-2012
5           5016222     PENDING     12-OCT-2012
6           5016222     PENDING     22-OCT-2012

您好,上面是我的表格,其中包含一些示例数据。我想要实现的是为每个 device_id 获取最后的 SUCCESS 状态(日期在 update_finished 字段中)和所有 PENDING 状态。从上面的例子中,结果查询应该有:

id          device_id   config_status   update_finished
2           5015001     SUCCESS     23-OCT-2012
3           5015001     PENDING     23-OCT-2012
4           5015001     PENDING     23-OCT-2012
5           5016222     PENDING     12-OCT-2012
6           5016222     PENDING     22-OCT-2012

因此这意味着只有日期列 update_finished 的最后一个 SUCCESS 状态和每个 device_id 的所有 PENDING 状态。

目前我正在尝试使用 GROUP BY: SELECT device_id, config_status, max(update_finished) AS "LastUpdate" 来自 config_status WHERE config_status = 'SUCCESS' group by device_id, config_status

这确实只返回每个 device_id 的最后 SUCCESS 状态,但它错过了 PENDING 状态并且它没有 id 列。如果我将 id 字段添加到 GROUP BY,那么无论如何分组都会按 id 进行。

任何人都可以帮助我进行正确的查询吗?它也应该有子查询吗?最后我需要将它作为 HQL,但我认为它与 SQL 非常相似。

编辑:

谢谢大家帮助我。所有这些查询都有效,但最适合我由@Remigio 提供的查询,因为最容易将其转换为返回参数化对象的 HQL 查询,而不仅仅是对象。

这是我的工作 HQL 查询,其中包含我在初始示例中省略的其他字段

List<ConfigStatus> statuses = getHibernateTemplate().find("select c from ConfigStatus c " +
                "where (configStatus = 'SUCCESS' and updateFinished = (select max(updateFinished) from " +
                "ConfigStatus c1 where c1.device.deviceId = c.device.deviceId and c1.configStatus = 'SUCCESS' and c1.configFile.configFileId = ?)) " +
                "or configStatus = 'PENDING' and configFile.configFileId = ?", new Object[] {configFileId, configFileId});

最佳答案

你可以试试这个查询:

select * from device d
where (config_status='SUCCESS' and update_finished = (select max(update_finished) from
device d1 where d1.device_id = d.device_id and d1.config_status='SUCCESS'))
or config_status='PENDING'

关于java - 坚持使用 sql/hql 查询组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13247774/

相关文章:

java - Maven编译错误: (use -source 7 or higher to enable diamond operator)

java - 如何将多个值添加到 TreeMap 中的同一个键?

sql - 如何将 Oracle Sql 转换为 Postgresql

mysql - 我不能在mysql中使用 "like"和 "in"吗?

oracle - Oracle存储过程中的表变量

java - 如何在静态方法中获取 Java 中的命名参数?

MySQL - 一张表中的多个外键

Oracle 季度 SQL 查询排名前三的产品

java - .jar 文件无法在我的 Mac 上打开

java - 我们如何使用 Maven 在根级别为 AWS Lambda 生成包含所有已编译类文件和资源文件的 zip 部署包?