简体   繁体   中英

How do I make a SPARQL query to find the highest value for a property?

Lets say I have a predicate like 'age' where the values of all age triples are integer literals. What SPARQL query would return the subject with the highest age in the data?

You just need to do order by desc with the age predicate and then limit to just get the first one.

PREFIX ns:    <http://namespace.org/ontology/>
SELECT ?s ?age
WHERE { ?s ns:age ?age }
ORDER BY DESC(?age) LIMIT 1

See the semantics of order by in SPARQL here

With the next version of SPARQL , 1.1, that is already supported in some systems you can use function aggregates and do ..

SELECT (max(?age) as ?maxage)
WHERE { ?s ns:age ?age }

This is not supported in all triple stores currently.

In addition to Manuel's queries you may need to use xsd:integer to force values to be cast to integer if your data has some invalid/dodgy values:

PREFIX ns:    <http://namespace.org/ontology/>
PREFIX xsd:   <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?age
WHERE { ?s ns:age ?age }
ORDER BY DESC(xsd:integer(?age)) LIMIT 1

Depending on your data you may need to add this into his second SPARQL 1.1 query as well.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM