使用要考虑的最大行数聚合SQL查询

使用要考虑的最大行数聚合SQL查询,sql,mysql,group-by,Sql,Mysql,Group By,我正试图找出一个SQLquery 我有一个带有团队id、ip地址和日期投票字段的投票数据表,我需要返回每个团队id的投票计数,但在任何24小时内仅计算每个ip地址的前10行 还没来得及检查,但下面的内容应该可以解决问题 SELECT Yr, DoY, team_id, SUM(IF NbVote < 10, NbVote, 10) As FilteredVoteCount FROM ( SELECT YEAR(date_voted) AS Yr, DAYOFYEAR(date_vote

我正试图找出一个SQLquery


我有一个带有团队id、ip地址和日期投票字段的投票数据表,我需要返回每个团队id的投票计数,但在任何24小时内仅计算每个ip地址的前10行

还没来得及检查,但下面的内容应该可以解决问题

SELECT Yr, DoY, team_id, SUM(IF NbVote < 10, NbVote, 10) As FilteredVoteCount
FROM (
  SELECT YEAR(date_voted) AS Yr, DAYOFYEAR(date_voted) AS DoY, 
    team_id, 
    ip_address,
    COUNT(*) AS NbVotes
  FROM myTable
  -- WHERE here for some possible extra condition.
  GROUP BY YEAR(date_voted), DAYOFYEAR(date_voted), team_id, ip_address
)
GROUP BY Yr, DoY, team_id
ORDER BY Yr, DoY, team_id   -- or some other order may be desired.

假设:投票表中每一行只有一个团队的前十票是来自给定IP地址的团队id的投票,在给定的日期应计算在内

这是每个团队每天的原始投票

select team_id, vote_date, ip_address, count(*) as raw_vote_count
  from votes
 group by team_id, vote_date, ip_address
现在,使用该选项,使用大小写表达式将投票数更正为不超过10:

select team_id, vote_date, ip_address,
       case when raw_vote_count > 10 
            then 10 
            else raw_vote_count 
        end as adjusted_vote_count
  from (select team_id, vote_date, ip_address, count(*) as raw_vote_count
          from votes
         group by team_id, vote_date, ip_address
       ) sub1
如果你想得到每天的总票数,那么:

select team_id, sum(adjusted_vote_count)
  from (
       select team_id, vote_date, ip_address,
              case when raw_vote_count > 10 
                   then 10 
                   else raw_vote_count 
               end as adjusted_vote_count
         from (select team_id, vote_date, ip_address, count(*) as raw_vote_count
                 from votes
                group by team_id, vote_date, ip_address
              ) sub1
       )
 where date = :mydate
 group by team_id
 order by team_id

在子选择中放置一个独特的语句和ORDERBY子句应该可以使这个解决方案起作用。对不起,mjv,我当然应该更具体一些。我需要表中存在的每24小时的总计数。例如,我需要周一、周二、周三等的总行数,每个ip地址每天最多10行。这有意义吗?还是我只是在胡扯,只对自己有意义@David,顺便说一句,看我的编辑除了添加对计算每天总数的支持之外,我还添加了我最初忘记的分组BY。。。。如果你对一周中的某一天而不是某一天感兴趣,只需更改YEARdate,DAYOFYEARdate,DAYOFYEARdate,DAYOFWEEKdate,你是超级明星!这使我走上了正确的道路,尽管有几个小错误:IF语句需要一组括号,而内部select语句需要一个别名。否则我就省去了几个小时的挠头!太感谢你了!