-2

这让我疯了!Musing MySQL DBMS(抱歉没有指定)......

我有下表:

"id", "pingdate", "players"
"3","2012-05-24 11:45:04","63"
"1","2012-05-24 12:15:03","14"
"2","2012-05-24 12:15:03","38"
"3","2012-05-24 12:15:03","24"
"1","2012-05-24 12:45:04","22"
"2","2012-05-24 12:45:04","40"
"3","2012-05-24 12:45:04","66"
"1","2012-05-24 13:15:03","14"
"5","2012-05-24 13:15:03","99"
"3","2012-05-24 13:15:03","63"
"3","2012-05-24 13:15:03","38"
"4","2012-05-24 13:15:03","63"

我想要以下结果:

"5","2012-05-24 13:15:03","99"
"3","2012-05-24 12:45:04","66"
"4","2012-05-24 13:15:03","63"

在文本中,我想要 3 个不同的 ID,具有最高玩家和正确的 pingdate。

我已经尝试过了,但它返回了错误的 pingdate:

SELECT id, 
       pingdate, 
       max(players) AS players 
FROM pings 
GROUP BY id  
ORDER BY players DESC 
LIMIT 3
4

4 回答 4

1

您没有指定 DBMS,所以这是一个 ANSI SQL 解决方案:

select *
from (
    select id, 
           pingdate,
           rank() over (partition by id order by players desc) as rnk
    from pings
) t
where rnk <= 3
order by players desc
于 2012-06-10T15:21:31.913 回答
0

您必须使用连接或子查询来完成,请参阅sql - 从基于组的行中获取 id

Select  a.id, a.pingdate, a.players from pings a, (
  SELECT id, max(players) AS players 
  FROM pings 
  GROUP BY id ) b 
where a.id=b.id and a.players=b.players 
ORDER BY players DESC 
LIMIT 3
于 2012-06-10T15:15:52.667 回答
0

首先你需要返回所有结果......然后只返回 3

SELECT *
FROM (
SELECT id,pingdate, max(players) AS players 
FROM pings 
GROUP BY id, pingdate  )
WHERE rownum = 3
ORDER BY players DESC 

我希望这能帮到您

于 2012-06-10T15:16:36.947 回答
0

最大值 := 的定义没有更高的值:

SELECT id, pingdate, players 
FROM pings pi
    WHERE NOT EXISTS (
         SELECT *
         FROM pings nx
         WHERE nx.id = pi.id
         AND nx.players > pi.players
         )
ORDER BY players
LIMIT 3
    ;
于 2012-06-10T15:24:16.810 回答