微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何尽可能简单地编写查询来获得此结果

如何解决如何尽可能简单地编写查询来获得此结果

| 我设置了这一行:
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
如何编写查询来做到这一点?我可以在单个查询中编写它吗?怎么样? 问候     

解决方法

        基本上,您可以从选择曾经加入团队的每个人开始,然后删除在为该团队输入之后为另一个团队创建条目的任何人。该查询专门允许您仅在一个位置更改
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);
    ,        有一点像:
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
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。