抽出したいEntityはStatusがdone、AgentIDがagentID(変数)
UserIDがユニークでありTagが learn < Tag < mathを満たすようなもの。
※ UserIDをユニークなものにする為にCreatedAtでOrderして一番初めのものを取得すればいいと考えています。

そのため以下のようなクエリを作成したい。

q := datastore.NewQuery("Task").
    Filter("Status =", "done").
    Filter("AgentID =", agentID).
    Filter("Tag >", "learn").
    Filter("Tag <", "math").
    DistinctOn("UserID")

しかしエラーは起きないもののDistinctOnが動作しないので

q := datastore.NewQuery("Task").
    Filter("Status =", "done").
    Filter("AgentID =", agentID).
    Project("UserID", "Tag").
    DistinctOn("UserID").
    Filter("Tag >", "learn").
    Filter("Tag <", "math")

のようにProjectを使用してからではないとDistinctOnが動作しない。
しかしこのようにしてしまうとTagをDistinctOnに入れろとエラーが起きるので期待通りのクエリを作成することができない。(DistinctOn("UserID", "Tag")とすればエラーは消えるがUserIDが
ユニークにならなくなる)

考えられる解決策としては
・ Projectを使わずにDistinctOnを使えるようにする。
・ Filter(不等式)を使ってもProject、DistinctOnに入れなくてよいようにする。

datastoreでこのようなCountをする操作はナンセンスだとは承知の上ですが、
もし解決例があれば教えて頂きたいです...。

GCP Datastoreドキュメント
https://cloud.google.com/datastore/docs/concepts/queries?hl=ja#datastore-datastore-distinct-on-query-go