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