我想使用两个动作(a和b)来对用户进行排名。
随着时间的推移,这两个动作都将线性地“释放”值。
动作a:60%重量
动作b:40%重量
得分=总和[动作权重*1000000/(当前时间戳-动作时间戳)]
带有用户操作的mysql表
user_id | action | timestamp
1 | A | 1524428013410
1 | B | 1525431531237
2 | B | 1525578131563
得分最高的用户应该排在最前面。
如何编写性能sql查询来计算用户的分数?
查询的输出应采用以下格式:
user_id | score
1 | 0.92830
2 | 0.76382
(上面例子中的分数只是我需要的输出格式的占位符)。
谢谢!
2条答案
按热度按时间abithluo1#
像这样:
xwbd5t1u2#
如果我理解正确,你只需要一个普通的
GROUP BY
. 你可以JOIN
重量。使用ORDER BY
排序。假设你的tableaction_user
.但我不确定你的配方。这是一些非常小的数字。也许可以根据需要改变。