1

我有 3 个主要类的架构:事务、地址和 ValueTx(Edge)。

我试图在一段时间内找到连接的组件。

现在我正在根据这个查询(OrientDB:连接组件 OSQL 查询):

SELECT distinct(traversedElement(0)) from ( TRAVERSE both('ValueTx') from (select * from Transaction where height >= 402041 and height <= 402044))

这将消除每个遍历的“头”,并从中进行另一个 DFS,我可以获得我想要搜索的连接组件的每个节点和边缘。

我怎样才能使用上面的查询,同时获得连接组件中的事务数以及它们的值的总和?(tx 的值是 Transaction 类的属性)

我想做类似的事情:

SELECT distinct(traversedElement(0)) as head, count(Transaction), sum(valueTot) from ( TRAVERSE both('ValueTx') from (select * from Transaction where height >= 402041 and height <= 402044)) group by head

但当然是行不通的。我只得到最后一个头的一行和所有交易的总和。

提前致谢。

编辑:

这是我正在寻找的一个例子:

关连交易

每笔交易都在相同的高度范围内:使用我的查询(我帖子中的第一个),我摆脱了通过多个地址链接的每组交易的第一个节点。例子:

#15:27
#15:28
#15:30
#15:34
#15:35
#15:36
#15:37
#15:41
#15:47
#15:53

我想要得到的是每个第一个节点的列表,其中包含它所属组的事务总数(不仅仅是处理事务)以及每个事务的值的总和(存储在 valueTot 类事务中.

Edit2:这是我进行测试的数据集:主要问题是我有很多数据,而且我之前尝试过的方法(每次摆脱我都会做一个不同的 sql 查询)它很慢,我希望有更快的方法。Edit3:这是一个更新的示例数据库:下载 (注意,它比另一个大)

select head, sum(valueTot) as valueTot, count(*) as numTx,sum(miner) as minerCount from (SELECT *,traversedElement(0) as head from ( TRAVERSE both('ValueTx') from (select * from Transaction where height >= 0 and height <= 110000 ) while ( @class = 'Address' or (@class = 'Transaction' and height >= 0 and height <= 110000 )) ) where @class = 'Transaction' ) group by head

我的系统上的这个查询大约需要一分钟,如果我限制结果集,所以我认为问题可能在选择不使用索引的事务的内部查询中......你知道吗?

4

2 回答 2

1

您可以使用此查询

select @rid, $a[0].sum as sumValueTot ,$a[0].count as countTransaction from Transaction 
let $a = ( select sum(valueTot),count(*) from (TRAVERSE both('ValueTx') from $parent.$current) where @class="Transaction")
where height >= 402041 and height <= 402044

希望能帮助到你。

于 2016-03-15T09:54:44.770 回答
0

这是你在找什么?

select head, sum(valueTot), count(*) from (SELECT *,traversedElement(0) as head from ( TRAVERSE both('ValueTx') from (select * from Transaction where height >= 402041 and height <= 402044)) where @class = "Transaction") group by head
于 2016-03-17T09:54:44.447 回答