2016-06-07 3 views
0

Я пишу следующий запрос SPARQL.FILTER with MIN в 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» условие, потому что какая-то другая часть запроса зависит от него.

+3

'ORDER BY ASC (? E) LIMIT 1' – AKSW

+0

Почему это помечено jena? – AndyS

ответ

1

Если вы хотите получить результаты с минимальным значением, проще всего отсортировать по этому значению и ограничить количество решений одним. Например (вы должны быть в состоянии применить этот метод к вашему запросу):

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

Это будет производить -3 в качестве единственного результата, потому что это было первым после того как результаты были заказаны, и только первый результат был принят на Лимит.