OrientDB:如何从group中获取ID?

时间:2014-07-17 09:07:42

标签: sql group-by aggregate-functions orientdb

我创建了一个名为TestEntity: {id: integer,ts: datetime}的非常简单的类,并插入了几条记录:

从TestEntity中选择

@rid    @version    @class  ts  id

\#12:0  1   TestEntity  2014-07-17 12:47:35 0

\#12:1  2   TestEntity  2014-07-17 12:48:33 0

\#12:2  1   TestEntity  2014-07-16 12:49:06 0

\#12:3  1   TestEntity  2014-07-17 12:49:34 1

\#12:4  1   TestEntity  2014-07-15 12:49:59 1

When I try to do aggregation query with group by "**select max(ts),@rid from TestEntity group by id**" I see the following result:

\#-2:1  0   #12:2   2014-07-17 12:48:33

\#-2:4  0   #12:4   2014-07-17 12:49:34

它正确找到了最后一个日期(同样适用于min(ts))。但@rid不正确。而且,令人惊讶的是,另一个带有min的查询给出了相同的rids:12:2,12:4:

选择min(ts),@ id从TestEntity组中删除

\#-2:1  0   \#12:2  2014-07-16 12:49:06

\#-2:4  0   \#12:4  2014-07-15 12:49:59

我的问题是,我做错了什么?我需要做什么来按整数id对文档进行分组(可以有重复项)并查找每个文档的最新日期,并获取每个文档的文档ID(@rid)?

2 个答案:

答案 0 :(得分:0)

试试这个:

select min(ts),@rid from ( select from TestEntity order by ts ) group by id

通过这种方式,您可以对有序的结果集进行应用。

答案 1 :(得分:0)

经过一番调查,我尝试了另外两种变体:

从id

中选择(按ts asc选择TestEntity顺序)
@rid    @version    @class  id  ts
#12:3   1   TestEntity  1   2014-07-17 12:49:34
#12:1   2   TestEntity  0   2014-07-17 12:48:33

从id

中选择(按ts desc选择TestEntity顺序)组
@rid    @version    @class  id  ts
#12:4   1   TestEntity  1   2014-07-15 12:49:59
#12:2   1   TestEntity  0   2014-07-16 12:49:06

他们给我正确的结果。我想我需要测试更大的数据集。