我正在尝试创建数据库中使用的标题的所有不同前缀的列表。标题作为内容文本(与属性相对)存储在xml标记中。
已提取所有标题,我想创建一个唯一前缀列表(标题本身是描述符,而不是唯一标识符)。
我已经理解到每个标题都带有前缀。我现在想做的是删除双打,只留下一小部分唯一值。
我尝试使用distinct-values(),但在我看来,这是对原始标题(即标记的内容)而不是对我创建的变量进行的操作。
我也尝试过将数组转换为in和out,但这也不会产生我想要的结果。
select user_id, min(event_id), min(timestamp),
(sum(num_consecutive) / 3)
from (select user_id, min(timestamp) as timestamp,
count(*) as num_consecutive,
min(event_id) as min_event_id
from (select t.*,
row_number() over (partition by user_id, timestamp::date order by timestamp) as seqnum,
row_number() over (partition by user_id, timestamp::date, tag order by timestamp) as seqnum_t
from t
) t
where tag = 1
group by user_id, timestamp::date, tag, (seqnum - seqnum_t)
) t
where num_consecutive >= 3
group by user_id, timestamp::date;
我想做的是从这样的事情中走出来:
for $name in db:open('DUMMYDATABASE')//body
let $new := $name/mytitle
let $thetitles := array { tokenize(replace($new, 's', ''), '-')[1] }
let $result := <thing>{distinct-values($names)}</thing>
return $result
到这样的迭代 “ con”,“ sub”,“ para”,“ super”
以便以后可以迭代该顺序以查找文档。
答案 0 :(得分:1)
这应该使您走得很远:
distinct-values(//body/tag/tokenize(., '\.')[1])
应用于
<body>
<tag>con.text1</tag>
<tag>sub.text1</tag>
<tag>con.text2</tag>
<tag>sub.text2</tag>
<tag>para.text</tag>
<tag>super.text</tag>
</body>
它产生四个值:'con', 'sub', 'para', 'super'
。