如何才能获得这样的结果,尽可能简单地编写查询

时间:2011-06-13 15:40:35

标签: mysql

我有这一行:

ID player_id team_id       created
1      2        1    2011-05-03 19:07:03     
2      3        1    2011-05-05 12:13:18
3      2        5    2011-05-07 18:12:54

我会选择属于team_id = 1的玩家,但是从这个结果我想要移除player_id = 2,因为这个玩家实际上已经移动并且他在第5组中玩(在team_id = 1中没有更多)。所以最终结果将是:

ID player_id team_id       created
2      3        1    2011-05-05 12:13:18

如何编写查询来执行此操作?我可以在一个查询中编写它吗?怎么样?

此致

2 个答案:

答案 0 :(得分:1)

基本上,您可以从选择曾经参与过团队的所有人开始,然后删除任何拥有其他团队参赛作品的人,这些团队是在他们参加相关团队后创建的。此查询特别允许您仅在一个地方更改team_id,并且如果您想要检查多个团队,则可以获得正确的结果。

SELECT
    t1.*
FROM
    my_table t1
WHERE
    t1.team_id = 1
AND
    NOT EXISTS(
        SELECT
            t2.id
        FROM
            my_table t2
        WHERE
            t2.player_id = t1.player_id
        AND
            t2.team_id != t1.team_id
        AND
            t2.created > t1.created);

答案 1 :(得分:0)

有点像:

SELECT allData.ID, allData.player_Id, allData.team_Id
FROM myTable allData
JOIN 
   (SELECT 
      player_id,  
      MAX(created) AS newestTime
   FROM myTable
   GROUP BY player_id) mostRecent 
ON allData.player_id = mostRecent.player_id 
AND allData.created = mostRecent.newestTime
WHERE team_id = 1