获取最新的独特字段记录

时间:2013-10-06 16:01:56

标签: sql ormlite

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

1 个答案:

答案 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>