繁体   English   中英

获取唯一字段的最新记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM