2015-11-05 19 views
0

我有一組事件與結構player_id,分數,時間戳進來。我想在此基礎上創建基於循環的排行榜,以便我可以每天,每週,每月和每年排行榜看到玩家。我應該使用什麼樣的聚合。我可以使用排序的有序集合嗎?是否也可以查看/存儲過去/歷史排行榜,以便我還可以查看上個月的排行榜?如何爲排行榜創建連續視圖?

回答

1

您可以使用fss_agg_weighted來構建已過濾的節省空間top-k,然後通過在fss_agg_weighted構建的列上調用fss_topk來提取top-k播放器得分。例如,連續計算,每天前10名選手打出:

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

而且在給定時間點提取前10名,

SELECT day, fss_topk(fss_agg_weighted) FROM daily_top_scores; 

您還可以結合前k個結果在更寬的日期範圍內不會丟失任何信息。要計算連續視圖的整個歷史記錄中的前10分:

SELECT fss_topk(combine(fss_agg_weighted)) FROM daily top_scores; 
+0

這是否也會處理玩家分數可能下降或分數可能爲負數的情況? –