需要修改此查询
我有一个查询,我认为是按照预期工作,直到不久之前。需要修改此查询
下面的查询通过我的'玩家'表,并更新'starter'值为true,对于那些拥有最高技能的玩家,他们的体重在该学校。
例如,如果有500名玩家的重量为X,它将选择属于同一所学校的所有玩家,而那些玩家将会将“起始者”值更新为真技能。
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
我遇到了现在的问题是,如果有在同一重量同校2名球员,也有相同的技能,那么都有他们的“启动器”值设置为true。
所以我的问题是,我需要添加到这个查询,只允许一个初学者在一个特定学校的体重?
我也有一个名为'年龄'的专栏,如果可以的话,我想选择两个相同技能发生的较低年龄段。
你将不得不改变你的查询,因此,只有那些行被更新,它具有更大的skill
或下age
没有其他行这个school
/weight
。
我另外的情况下,加入了独特的列id
你有相同的skill
和相同age
行。
更换
AND b.skill > player.skill
通过
AND ( (b.skill > player.skill)
OR (b.skill = player.skill AND b.age < player.age)
OR (b.skill = player.skill AND b.age = player.age AND b.id > player.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
欣赏努力,但我认为你的代码现在略高于我。 – Meowbits 2012-04-23 21:43:34
如果他们有相同的年龄? – 2012-04-23 07:48:02
好点..我认为运行一个额外的查询可能是最好的,以查看每个学校的首发总人数是否大于总权数,然后可能找到受影响的区域并对其进行编辑 – Meowbits 2012-04-23 22:17:25
@Meowbits:I不要以为这就是阿米特试图说的,这应该是完全可能在一个单一的查询。 – 2012-04-24 06:30:14