我正在编写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”的最小值,因为查询的其他部分依赖于它。
答案 0 :(得分:1)
如果您想获得具有最小值的结果,最简单的方法是按该值排序并将解决方案的数量限制为一个。例如(您应该能够将此技术应用于您的查询):
select ?x {
values ?x { 8 2 0 2 -3 1 5 }
}
order by ?x
limit 1
这将产生-3作为唯一的结果,因为它是在命令结果之后的第一个,并且只有第一个结果被限制。