整个表中的Hibernate Query用唯一的行选择

时间:2014-11-08 03:39:36

标签: mysql hibernate hql

我想知道如何过滤Hibernate的结果 例如,我有这个示例表:

--------------------------------------------
|  ID  |  STRING  |            DATE        |
--------------------------------------------
|   1  |   "ABC"  |   2014-11-07 21:45:00  |
--------------------------------------------
|   2  |   "ABC"  |   2014-11-07 22:45:00  |
--------------------------------------------
|   3  |   "DCE"  |   2014-11-07 22:48:00  |
--------------------------------------------
|   4  |   "ABC"  |   2014-11-07 23:48:00  |
--------------------------------------------

我需要的结果是:

--------------------------------------------
|  ID  |  STRING  |            DATE        |
--------------------------------------------
|   3  |   "DCE"  |   2014-11-07 22:48:00  |
--------------------------------------------
|   4  |   "ABC"  |   2014-11-07 23:48:00  |
--------------------------------------------

表的所有行,但是,当我在STRING列中具有相同的内容时,具有最新DATE的列是结果集中的列。

在休眠中,我知道 - 选择所有行; - 选择重复的行并仅保留最新的行。

但我不知道如何将这两种情况结合在一起,我无法在任何地方找到它。

我在STRING中有一个固定长度,我在我的代码中使用假主键来识别寄存器,但是该值是由用户插入的,我之前并不知道列中的内容。

1 个答案:

答案 0 :(得分:0)

您可以使用not exists子句执行此操作:

select e.*
from example e
where not exists (select 1 from example e2 where e2.string = e.string and e2.date > e.date);

也就是说,选择没有其他行的所有行具有相同的字符串和更大的日期。