现在有一表T 里面有这样一些列:rTime         datetime
userid        int
gamename      varchar
scorechanged  int我想用一个查询 统计出5天内特定gamename中scorechanged值最大的10个userid  请问应该怎么做?
比如我知道gamename = '扫雷'

解决方案 »

  1.   

    SELECT TOP 10 [userid]
    FROM T
    WHERE gamename='扫雷'
      AND (rTime BETWEEN DATEADD(DAY,-5,GETDATE()) AND GETDATE())
    ORDER BY scorechanged DESC;
      

  2.   


    --五天内是指最近五天吗?
    select top 10 userid from T where gamename='扫雷' order by scorechanged desc
      

  3.   


    不对哦。。userid 是重复的。。 现在要统计scorechanged 的sum值最大的10个userid
      

  4.   

    rTime   userid   gamename scorechanged
    08.10.1 1        扫雷      10
    08.10.1 1        扫雷      10
    08.10.2 1        扫雷      10
    08.10.3 2        扫雷      -10
    08.10.3 2        扫雷      -100
    08.10.3 2        扫雷      10
    .......
    这样的
      

  5.   

    SELECT TOP 10 [userid]
    FROM
    (
      SELECT DISTINCT [userid]
      FROM T
      WHERE gamename='扫雷'
         AND (rTime BETWEEN DATEADD(DAY,-5,GETDATE()) AND GETDATE())
    ) AS t
    ORDER BY scorechanged DESC;
      

  6.   

    SELECT TOP 10 [userid]
    FROM
    (
      SELECT [userid],SUM(scorechanged) AS scorechanged
      FROM T
      WHERE gamename='扫雷'
         AND (rTime BETWEEN DATEADD(DAY,-5,GETDATE()) AND GETDATE())
      GROUOP BY [userid]
    ) AS t
    ORDER BY scorechanged DESC;
      

  7.   

    看到了。 不是单单distinct吧 而是单个userid的所有行的scorechanged的sum值 包括负的
      

  8.   

    GROUP 写错.
    SELECT TOP 10 [userid]
    FROM
    (
      SELECT [userid],SUM(scorechanged) AS scorechanged
      FROM T
      WHERE gamename='扫雷'
         AND (rTime BETWEEN DATEADD(DAY,-5,GETDATE()) AND GETDATE())
      GROUP BY [userid]
    ) AS t
    ORDER BY scorechanged DESC;