我在我的数据库中有这个表,我想构建一个查询,它将返回过去七天中包含日期的记录,数字是最大值,记录将按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的每个组必须是具有最大数量和日期的记录。
答案 0 :(得分: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所以诀窍就是按日期排序。< / p>