数据集包含具有以下键的记录:userID,期间和点。
是否可以按period
和最大 points
查询一条记录。
示例方案
数据集
[
/* period: 2016-01-01 */
{ userID: 1, period: '2016-01-01', points: 100},
{ userID: 1, period: '2016-01-01', points: 200},
{ userID: 1, period: '2016-01-01', points: 300},
/* period: 2016-01-02 */
{ userID: 1, period: '2016-01-02', points: 50},
{ userID: 1, period: '2016-01-02', points: 70},
{ userID: 1, period: '2016-01-02', points: 10},
/* period: 2016-01-03 */
{ userID: 1, period: '2016-01-03', points: 80},
{ userID: 1, period: '2016-01-03', points: 20},
{ userID: 1, period: '2016-01-03', points: 0},
]
查询结果:
这些是所需的查询结果。 每个时段一个记录和该时段的最高点数
{ userID: 1, period: '2016-01-02', points: 300},
{ userID: 1, period: '2016-01-03', points: 70},
{ userID: 1, period: '2016-01-04', points: 80},
答案 0 :(得分:1)
这可以通过OData Extension for Data Aggregation Version 4.0中定义的$apply
查询选项来实现,假设要查询的实体名为PointHistory
:
GET PointHistory?$apply=groupby((period),topcount(1,points))
这将按period
对记录进行分组,按points
对每个组中的记录进行排序,然后返回每个组的最高记录。