

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

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

[code]

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

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

[code]

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

のように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>


CC BY-SA 4.0
2019-06-25T07:44:30.703
56086
2019-06-25T10:34:18.530
2019-06-25T10:34:18.530
32561
32561
question
sql go database google-app-engine
GoにおけるDatastoreクエリのFilter(不等式)とDistinctOnを同時に使う方法