how would one write a datomic query that takes the entire set into account

clojure, datomic

Solution

[:find (max ?tuple) :where 
    [?k :kid/age ?age] 
    [?k :kid/name ?name] 
    [(vector ?age ?name) ?tuple]

Note:

the order of attributes in expression `(vector ?age ?name)` matters

the query returns single result while we might expect a collection because there may be many kids of age that is the maximum in the set. You can use `(max n ?tuple)` to achieve that.

See also the Aggregates Returning Collections section in http://docs.datomic.com/query.html

If you have something more specific in mind, provide more details in the question and include your schema.

Problem

Is it possible to write these sort of queries in datomic? - find the name of the oldest kid - find the person with the lowest body-mass index (weight / height)

Original source