Search code examples
databaserdfsparql

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?


Solution

  • 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.