使用SPARQL中的MIN进行过滤

时间:2016-06-07 21:39:07

标签: sparql rdf

我正在编写SPARQL查询。

select ?o1, ?o2, ?e from <http://ndssl.bi.vt.edu/chicago/> 
where{
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infector_pid> ?o1.
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_infectee_pid> ?o2.
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_iteration> '0'^^xsd:decimal.
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_exposureday> ?e.
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/contactnetwork_pid1> ?o1.
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/contactnetwork_pid2> ?o2.
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/contactnetwork_acttype1> '5'^^xsd:decimal.
?s1 <http://ndssl.bi.vt.edu/chicago/vocab/contactnetwork_acttype1> '5'^^xsd:decimal
}

查询返回如下结果。

<http://ndssl.bi.vt.edu/chicago/person/pid#449563560>   <http://ndssl.bi.vt.edu/chicago/person/pid#446718746>   32
<http://ndssl.bi.vt.edu/chicago/person/pid#449563560>   <http://ndssl.bi.vt.edu/chicago/person/pid#446734805>   5
<http://ndssl.bi.vt.edu/chicago/person/pid#450309500>   <http://ndssl.bi.vt.edu/chicago/person/pid#450261482>   30 

我只想要“?e”最小的三联。这意味着:

<http://ndssl.bi.vt.edu/chicago/person/pid#449563560>   <http://ndssl.bi.vt.edu/chicago/person/pid#446734805>   5

我该怎么办?我试过跟随,但它不起作用。

.............
?s <http://ndssl.bi.vt.edu/chicago/vocab/dendrogram_exposureday> ?e.FILTER (MIN (?e))
.............

我需要在“WHERE”子句中找到对象“?e”的最小值,因为查询的其他部分依赖于它。

1 个答案:

答案 0 :(得分:1)

如果您想获得具有最小值的结果,最简单的方法是按该值排序并将解决方案的数量限制为一个。例如(您应该能够将此技术应用于您的查询):

select ?x {
  values ?x { 8 2 0 2 -3 1 5 }
}
order by ?x
limit 1

这将产生-3作为唯一的结果,因为它是在命令结果之后的第一个,并且只有第一个结果被限制。