Агрегатная функция как результат выбора

Можно ли написать

select min(next) from participant;

как запрос эскелета?

ОБНОВИТЬ

Я обнаружил min_ функция. Тем не менее, код

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

по-видимому, имеет несколько неоднозначных типов:

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 type ‘forall (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

1 ответ

Мне удалось заставить это работать, используя постоянные rawSql:

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

(Но учтите неисчерпаемый шаблон, если вы копируете этот код.)

Другие вопросы по тегам