我有这一行:
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
如何编写查询来执行此操作?我可以在一个查询中编写它吗?怎么样?
此致
答案 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