我想实现一个基于老化的"对数"分数衰减,我试图找出SUM/LOG组合.这里有一个当前查询的简化版本:
SELECT SUM(1) as total_score FROM posts
JOIN votes ON votes.post_id = posts.post_id
WHERE 1
GROUP BY post_id
ORDER BY total_score DESC
Run Code Online (Sandbox Code Playgroud)
我目前正在使用SELECT'SUM(1)作为total_score',但我想修改查询以考虑投票的日期/年龄; 今天投票从今天权重1,投票从15天前的权重接近.8和投票从30天前接近0.我将日期字段存储在投票表(vote_date)上作为unix_timestamp.

我并不真正关心WHERE clausule; 这很简单.我想弄清楚的是对数老化部分.
假设您有一个函数WEIGHT(age)可以给出几天前投票的权重age。
那么你的查询将是
SELECT SUM(WEIGHT(DATEDIFF(CURRENT_DATE, votes.date_vote_cast))) as total_score,
posts.post_id
FROM posts
JOIN votes ON votes.post_id = posts.post_id
WHERE votes.date_vote_cast <= CURRENT_DATE
AND votes.date_vote_cast > CURRENT_DATE - INTERVAL 30 DAY
GROUP BY post_id
ORDER BY total_score DESC
Run Code Online (Sandbox Code Playgroud)
恐怕我不知道你到底想要什么功能WEIGHT(age)。但你确实这么做了,而且你可以解决这个问题。
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |