すべてStatusUpdate
の とそれぞれUser
の を選択する Esqueleto クエリがあります。StatusUpdate
ごとに1 つだけに制限したいと思います。当日からは sUser
のみです。StatusUpdate
有効な SQL クエリがありますが、それを有効な Esqueleto に変換するのに苦労しています。
SELECT "email", "subject"
FROM "status_update"
LEFT JOIN "user"
ON ("status_update"."user" = "user"."id")
WHERE "status_update"."id"
IN (SELECT MAX("status_update"."id") FROM "status_update" GROUP BY "status_update"."user")
私がこれまでに持っているもの:
statusUpdates <- runDB
$ E.select
$ E.from $ \(status_update `E.LeftOuterJoin` user) -> do
E.on (status_update ^. StatusUpdateUser E.==. user ^. UserId)
E.where_ ((status_update ^. StatusUpdateId) `E.in_`
(E.subList_select $ E.from $ \(status_update) -> do
E.groupBy (status_update ^. StatusUpdateUser)
return (status_update ^. StatusUpdateId)))
return
( status_update ^. StatusUpdateId
, status_update ^. StatusUpdateSubject
, status_update ^. StatusUpdateMessage
, user ^. UserEmail
)
…次の出力が生成されます。
SELECT "status_update"."id", "status_update"."subject", "status_update"."message", "user"."email"
FROM "status_update"
LEFT OUTER JOIN "user"
ON "status_update"."user" = "user"."id"
WHERE "status_update"."id"
IN (SELECT "status_update2"."id" FROM "status_update" AS "status_update2" GROUP BY "status_update2"."user"); []
欠けているのはMAX
、2番目の選択の機能だけです。クエリのさまざまな部分に絞り込もうとしていE.max_
ますが、何も機能していないようです。
ヘルプ?