如何编写 hql 查询或条件查询以根据时间戳获取最新记录

Posted

技术标签:

【中文标题】如何编写 hql 查询或条件查询以根据时间戳获取最新记录【英文标题】:How to write hql query or criteria query to fetch latest records based on timestamp 【发布时间】:2014-04-07 13:54:41 【问题描述】:

嗨,我是 ORM 技术的新手,因此可以帮助如何编写 hql 或条件查询以根据时间戳获取最新记录。 这里 Eventdata 域属性名称将与下面提到的列名称相同。 我有这样的桌子 事件数据:

AccountId   DeviceId    timestamp   Address
fuel    mdemo143    1389716109  Bangalore Road, Rajendra Nagar, Mysore, Karnataka
fuel    mdemo469    1389757662  Bharath International Travels, Diwan's Road
fuel    mdemo731    1390179714  Ring Road, Hebbalu, Mysore,
fuel    mdemo143    1390148225  Gandhinagar, Mysore


fuel    mdemo469    1389757682  Bharath International Travels, Diwan's Road
fuel    mdemo469    1389759662  Bharath International Travels, Diwan's Road
fuel    mdemo731    1390179714  Ring Road, Hebbalu, Mysore,
fuel    mdemo731    1390279714  Ring Road, Hebbalu, Mysore,

我需要的输出表如下:

AccountId   DeviceId    timestamp   Address

fuel    mdemo143    1390148225  Sun, 19 Jan 2014 16:17:05 GMT   Gandhinagar, Mysore


fuel    mdemo469    1389759662  Wed, 15 Jan 2014 04:21:02 GMT   Bharath International Travels, Diwan's Road
fuel    mdemo731    1390279714  Tue, 21 Jan 2014 04:48:34 GMT   Ring Road, Hebbalu, Mysore

请帮助我。在此先感谢

【问题讨论】:

【参考方案1】:

考虑使用ORDER BYQuery#setMaxResults

类似的东西

queryString = "SELECT e FROM Eventdata e ... ORDER BY e.timestamp";

session.createQuery(queryString).setMaxResults(10);

应该可以。

【讨论】:

【参考方案2】:

如果您尝试获取基于 timestamp 的记录,您可以使用类似:

    @SuppressWarnings("unchecked")
public List<String> getData(Date d)
    Query query = em.createQuery("SELECT e FROM EventDate e WHERE e.timestamp > :d ORDER BY e.timestamp");
    query.setParameter("d", d);
    List<String> queryResults = query.getResultList();
    return queryResults;

这将返回指定timestamp之后的记录

【讨论】:

以上是关于如何编写 hql 查询或条件查询以根据时间戳获取最新记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用休眠查询语言查找两个时间戳之间的差异

hibernate之HQL查询

hql 查询以获取数据和金额总和

hql 查询 合并查询根据不同条件的结果 并排序

HQL/SQL 根据计数选择前 10 条记录

选择查询以获取确切的时间戳