Hasura中通过GraphQL实现按日期排序去重取各课程最新记录
实现方案
可以实现,Hasura 原生支持 PostgreSQL 的 DISTINCT ON 语法,直接通过 GraphQL 查询的内置参数就可以实现和你提供的 SQL 完全一致的效果。
示例查询代码
query getLatestCoursePerCode { course( distinct_on: [course_code] order_by: [ { course_code: asc }, { start_date: desc } ] ) { course_id course_code start_date } }
参数逻辑说明
distinct_on: [course_code]对应 SQL 中的DISTINCT ON (course_code),指定按 course_code 去重,每个唯一的 course_code 仅返回一条记录order_by配置需要和distinct_on的字段顺序保持一致,后续追加的start_date: desc会让每个 course_code 分组下优先返回开课时间最新的记录,和你编写的 SQL 逻辑完全匹配
返回结果示例
查询返回的结果和你预期的输出一致:
{ "data": { "course": [ { "course_id": "uuid2", "course_code": "course_a", "start_date": "2021-09-01" }, { "course_id": "uuid4", "course_code": "course_b", "start_date": "2021-09-01" } ] } }
如果你的 Hasura 对接的不是 PostgreSQL 数据源,也可以通过预先创建数据库视图、或者自定义 SQL 函数的方式在 Hasura 中挂载对应查询接口实现相同效果。
内容的提问来源于stack exchange,提问作者AARon
相关产品推荐
相关产品推荐

