0

I have a set of events coming in with the structure player_id, score, timestamp. I want to create cycle based leaderboards on this so that I can see the players daily, weekly, monthly and yearly leaderboards. What kind of aggregations should I use. Could I use ordered set aggregates with rank?. And is it possible to also see/store the past/historical leaderboards so that I could also see last months leaderboards?

1 Answers1

0

You can use fss_agg_weighted to build filtered space saving top-ks, and then extract the top-k player scores by calling fss_topk on the column built by fss_agg_weighted. For example, to continuously compute the daily top 10 player scores:

CREATE CONTINUOUS VIEW daily_top_scores AS
   SELECT day(timestamp), fss_agg_weighted(player_id, 10, score) GROUP BY day;

And to extract the top-10 at a given point in time,

SELECT day, fss_topk(fss_agg_weighted) FROM daily_top_scores;

You can also combine the top-k results over wider date ranges without losing any information. To compute the top-10 scores over the entire history of the continuous view:

SELECT fss_topk(combine(fss_agg_weighted)) FROM daily top_scores;
Derek Nelson
  • 178
  • 1
  • 5
  • Would this also handle the scenario where player scores could decrease or where the score could be negative? – Johny Jose Nov 13 '15 at 08:21