Sql 需要修改此查询

Sql 需要修改此查询,sql,sql-server-ce,Sql,Sql Server Ce,我有一个问题,我认为是工作的预期,直到不久前 下面的查询将遍历我的“玩家”表,并将该学校中每名体重技能最高的玩家的“初学者”值更新为true 例如,如果有500名球员体重为X,它将选择属于同一学校的所有球员,并将其中技能最高的球员的“初学者”值更新为true UPDATE player SET starter = 'TRUE' WHERE NOT EXISTS ( SELECT school, weight, skill FROM playe

我有一个问题,我认为是工作的预期,直到不久前

下面的查询将遍历我的“玩家”表,并将该学校中每名体重技能最高的玩家的“初学者”值更新为true

例如,如果有500名球员体重为X,它将选择属于同一学校的所有球员,并将其中技能最高的球员的“初学者”值更新为true

UPDATE player 
    SET starter = 'TRUE' 
    WHERE NOT EXISTS
    (
      SELECT school, weight, skill 
      FROM player b " 
      WHERE b.school = player.school 
      AND b.weight = player.weight 
      AND b.skill > player.skill
    )
    AND player.game_id = 1
我现在遇到的问题是,如果有两名来自同一学校、体重相同、技能相同的球员,那么他们的“首发”值都设置为true

所以我的问题是,我需要在这个查询中添加什么,才能允许某个学校的一个体重只有一名初学者


我还有一个名为“年龄”的列,如果可以的话,我想选择两个年龄较低的一个,在这两个年龄段中有相同的技能。

您必须更改查询,以便只更新这些行,这所
学校没有其他行
/
体重
,技能更高或年龄更低

我还添加了一个唯一的列
id
,以防您的行具有相同的
技能
和相同的
年龄

替换

AND b.skill > player.skill

和((b.skill>player.skill)
或者(b.skill=player.skill和b.ageplayer.id)
)

我不知道如何计算这方面的技能,我已经编写了一个替换选择,您可以加入它并相应地更新行。还创建了一些9行的示例数据;最后两个H和我有相同的技能和学校,但不同的年龄(一天)。假设你有出生日期,最大/分钟将工作。你仍然可以有年龄相同的球员,所以需要有一个机制来处理这个问题。不确定标准,所以这里不适合

declare @players table (school varchar(100), weight float, skill int, dob datetime, name varchar(100))

insert into @players
select 'a', 100, 10, GETDATE(), 'a'
union all select 'a', 101, 11, GETDATE(), 'b'
union all select 'a', 102, 12, GETDATE(), 'c'
union all select 'a', 103, 13, GETDATE(), 'd'
union all select 'a', 104, 14, GETDATE(), 'e'
union all select 'a', 105, 15, GETDATE(), 'f'
union all select 'a', 106, 16, GETDATE(), 'g'
union all select 'a', 107, 17, GETDATE(), 'h'
union all select 'a', 107, 17, dateadd(dd,-1,GETDATE()), 'i'

select * from @players
SELECT 
        school, 
        weight, 
        max(skill) as Skill,
        MIN(dot) as DOB
FROM @players b 
group by school, weight
这种回归;8排,从107名重量级选手中选出较年轻的选手

school  weight  (No column name)    (No column name)
a   100 10  2012-04-23 08:53:19.877
a   101 11  2012-04-23 08:53:19.877
a   102 12  2012-04-23 08:53:19.877
a   103 13  2012-04-23 08:53:19.877
a   104 14  2012-04-23 08:53:19.877
a   105 15  2012-04-23 08:53:19.877
a   106 16  2012-04-23 08:53:19.877
a   107 17  2012-04-22 08:53:19.877

如果他们年龄相同怎么办?说得好。。我认为最好是运行一个额外的查询,看看每个学校的初学者总数是否大于总权重,然后找到受影响的区域并进行编辑them@Meowbits当前位置我不认为这是Amit试图说的,这在一个查询中应该是完全可能的。感谢您的努力,但我认为你的代码暂时比我高一点。到底是什么不起作用?您得到错误或错误的结果了吗?对不起,我一直很忙。通过使用这两行代码,我得到了比以前多得多的“真”值。
school  weight  (No column name)    (No column name)
a   100 10  2012-04-23 08:53:19.877
a   101 11  2012-04-23 08:53:19.877
a   102 12  2012-04-23 08:53:19.877
a   103 13  2012-04-23 08:53:19.877
a   104 14  2012-04-23 08:53:19.877
a   105 15  2012-04-23 08:53:19.877
a   106 16  2012-04-23 08:53:19.877
a   107 17  2012-04-22 08:53:19.877