范围COUNT查询基于HATEnate中的纪元时间戳的DATE

时间:2014-06-20 22:59:06

标签: java hibernate postgresql orm range-query

我在postgres中有一个表由epoch时间戳索引....现在我想查询这个表来获取特定日期之间的事件数...我在postgres中查询了它但是我我不知道如何在hibernate中实现这一点,而无需在hibernate中编写本地postgres查询....

我的表结构是

event
-----------------
id,      created,     updated,    event_type,     source_machine         timestamp
1       07.05.2011                  event1                machine1        938970822
2       07.05.2011                  event2                machine2       1332949476
3       07.05.2011             NullPointerException       machine2        648034359
4       06.05.2011                  event2                machine2       1173340611
5       06.05.2011                  event1                machine1       1391797768
6       05.05.2011                  event2                machine1       849970844
7       04.05.2011                  event1                machine2        
*Currently, table has 10k rows.

仅供参考:我不能使用CREATED列,我必须只使用时间戳... 到目前为止我用postgres写的查询是......

select event_type,to_char(to_timestamp(timestamp),'YYYY-MM-DD') AS date_range,count(*) from event where to_char(to_timestamp(timestamp),'YYYY-MM-DD') between to_char(to_timestamp(549788400),'YYYY-MM-DD') and to_char(to_timestamp(1403247600),'YYYY-MM-DD') and event.machine = 'machine1' group by event_type,to_char(to_timestamp(timestamp),'YYYY-MM-DD');

我必须使用" to_char"如果我不用它,例如。 " 2010-03-31 23:59:59。"边界条件具有潜在危险性:如果系统中的事务在23:59:59到00:00:00之间,我会错过它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我做了一个支持hibernate的查询。如果有人在寻找类似问题的答案,我的解决方案就是这样。 以上查询在HQL中。

SELECT new map(E.event_type as name,to_char(to_timestamp(E.timestamp),'MM-DD-YYYY') AS key,count(*) as value) from Event E WHERE E.timestamp BETWEEN " + startTime + " and " + endTime + " AND E.platform = '"+platform+"' AND E.event_type = '"+eventName+"' GROUP BY E.event_type,to_char(to_timestamp(E.timestamp),'MM-DD-YYYY') ORDER BY to_char(to_timestamp(E.timestamp),'MM-DD-YYYY')";