2013-10-06 92 views
1

我在我的數據庫中有此表,並且我想構建一個查詢,該查詢將返回最近七天中包含日期的記錄,該數字爲最大值,記錄將按foo_id分組。例如:獲取帶有唯一字段的最新記錄

+---------------------------------------------------+ 
| id | number |   date   | foo_id | 
+---------------------------------------------------+ 
| 0|  29 | 2013-10-01 08:52:00.000000 |  7 | 
| 1|  12 | 2013-10-02 08:52:00.000000 |  7 | 
| 2|  23 | 2013-10-02 08:52:00.000000 |  2 | 
| 3|  42 | 2013-10-02 08:52:00.000000 |  2 | 
+---------------------------------------------------+ 

查詢將返回:

| 3|  42 | 2013-10-02 08:52:00.000000 |  2 | 
| 0|  29 | 2013-10-01 08:52:00.000000 |  7 | 

我建立這個查詢,但它並沒有在所有的工作:

Calendar time = Calendar.getInstance(); 
time.add(Calendar.DATE, -7); 

QueryBuilder<GreatTable, Integer> qBt = dao.queryBuilder(); 
qBt.where().ge(GreatTable.DATE_COLUMN_NAME, time.getTime()); 
qBt.orderBy(GreatTable.DATE_COLUMN_NAME, false).orderBy(GreatTable.NUMBER_COLUMN_NAME, false); 
qBt.groupBy(GreatTable.FOO_ID_COLUMN_NAME); 

,其輸出是:

| 1|  12 | 2013-10-02 08:52:00.000000 |  7 | 
| 2|  23 | 2013-10-02 08:52:00.000000 |  2 | 

每組由foo_id它mu是最大數量和日期的記錄。

回答

1

最後我的查詢是這樣的:

qBt.where().ge(GreatTable.DATE_COLUMN_NAME, time.getTime()); 
qBt.groupBy(GreatTable.FOO_ID_COLUMN_NAME).having("MAX(" + GreatTable.DATE_COLUMN_NAME + ")"); 
qBt.orderBy(GreatTable.DATE_COLUMN_NAME, true); 

PD:當一個日期添加是有差別不大,例如2013年10月2日08:52:00.000000和2013年10月2日08: 52:00.000010所以訣竅是按日期排序。

相關問題