1

我的数据库中有这个表,我想构建一个查询,该查询将返回过去 7 天中包含日期的记录,数量为最大值,记录将按 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 必须是具有最大数量和日期的记录。

4

1 回答 1

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-02 08:52:00.000000 和 2013-10-02 08:52:00.000010 所以诀窍也是按日期排序。

于 2013-10-15T15:52:57.053 回答