[英]Get the most recent record of with unique fields
我的数据库中有此表,我想构建一个查询,该查询将返回最近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必须是具有最大数目和日期的记录。
最后我的查询看起来像:
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,所以窍门也是按日期排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.