2014-06-20 78 views
0

我有一個表在postgres中按時代戳記索引....現在我想查詢此表以獲取特定日期之間沒有事件的數量......我做了一個查詢它在Postgres的,但我不知道我怎麼能在Hibernate實現這一目標,而無需編寫本地的Postgres在Hibernate查詢....範圍COUNT查詢基於HATE的紀元時間戳DATE

我的表結構

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. 

FYI:我不能使用創建列這個我只能使用時間戳... 到目前爲止查詢我已寫在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之間系統中有交易,我會錯過它。任何幫助,將不勝感激。

回答

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')";