MySQL按最新日期GROUP BY统计每人最近投票数问题
解决每人仅统计最近一次投票的统计问题
针对你这个需求,我们可以通过先筛选每个用户的最新投票记录,再统计投票结果的方式来实现,直接给你完整的SQL语句:
SELECT choice, COUNT(*) AS vote_count FROM votes v INNER JOIN ( -- 先找出每个用户的最新投票日期 SELECT name, MAX(date) AS latest_date FROM votes GROUP BY name ) latest_votes ON v.name = latest_votes.name AND v.date = latest_votes.latest_date -- 按投票选项分组统计数量 GROUP BY choice;
逻辑拆解:
- 子查询
latest_votes:按name分组,用MAX(date)获取每个用户的最新投票日期,这一步是核心——先锁定每个用户的有效投票记录范围。 - 关联原表:将原表
votes和子查询结果关联,匹配用户名和对应的最新日期,这样就精准筛选出了每个用户的最后一次投票记录。 - 统计结果:最后按
choice分组,用COUNT(*)统计每个选项的得票数,正好符合你要的结果(示例中A、B各1票)。
如果你的date字段是MySQL的DATE类型,这个语句完全适用;如果是字符串格式,只要日期格式是可排序的(比如YY-MM-DD或YYYY-MM-DD),MAX(date)也能正确识别出最新日期。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

