Aggregate function as a result of selection

Is it possible to write

select min(next) from participant;

How to request esqueleto?

UPDATE

I discovered a function min_. However code

nextMessageTime =
  from $ \p -> min_ (p ^. ParticipantNext)

apparently has several ambiguous types:

Could not deduce (Database.Esqueleto.Internal.Language.From
                    query expr backend (query (Entity (ParticipantGeneric backend0))))
  arising from the ambiguity check for ‘nextMessageTime’
from the context (Database.Esqueleto.Internal.Language.From
                    query expr backend (query (Entity (ParticipantGeneric backend2))),
                  Esqueleto query1 query backend1)
  bound by the inferred type for ‘nextMessageTime’:
             (Database.Esqueleto.Internal.Language.From
                query expr backend (query (Entity (ParticipantGeneric backend2))),
              Esqueleto query1 query backend1) =>
             query (Value (Maybe Int64))
  at Presta/DB/Queries.hs:(15,1)-(16,42)
The type variable ‘backend0’ is ambiguous
When checking that ‘nextMessageTime’
  has the inferred typeforall (query :: * -> *)
                                (expr :: * -> *)
                                backend
                                (query1 :: * -> *)
                                backend1
                                backend2.
                         (Database.Esqueleto.Internal.Language.From
                            query expr backend (query (Entity (ParticipantGeneric backend2))),
                          Esqueleto query1 query backend1) =>
                         query (Value (Maybe Int64))’
Probable cause: the inferred type is ambiguous
+4
source share
1 answer

I managed to get this working using constant rawSql:

nextMessageTime = do
  [Single t] <-
    rawSql
      "SELECT min(next) FROM participant"
      []
  return (t :: Int64)

(But remember the inexhaustible pattern if you copy this code.)

+2
source

Source: https://habr.com/ru/post/1545838/


All Articles