我希望将以下查询合并为一个,其中
- scouting.jumpGate 是整数,
- scuting.astroLoc 是一个字符串,
- scouting.ownerguild 是一个字符串,并且
- scouting.galaxy 是一个整数
交叉链接到另一个表(并且是我的 GROUP):
Select TOP 3
scouting.jumpGate,
scouting.astroLoc,
scouting.ownerGuild,
scouting.Galaxy
FROM scouting
WHERE scouting.Galaxy = 1
AND scouting.ownerGuild = 'TEST'
ORDER BY scouting.jumpGate DESC,
scouting.astroloc DESC;
和
SELECT TOP 3
scouting.jumpGate,
scouting.astroLoc,
scouting.ownerGuild,
scouting.Galaxy
FROM scouting
WHERE scouting.Galaxy = 2
AND scouting.ownerGuild = 'TEST'
ORDER BY scouting.jumpGate DESC,
scouting.astroloc DESC;
和
SELECT TOP 3
scouting.jumpGate,
scouting.astroLoc,
scouting.ownerGuild,
scouting.Galaxy
FROM scouting
WHERE scouting.Galaxy = 3
AND scouting.ownerGuild = 'TEST'
ORDER BY scouting.jumpGate DESC,
scouting.astroloc DESC;
一直持续到
SELECT TOP 3
scouting.jumpGate,
scouting.astroLoc,
scouting.ownerGuild,
scouting.Galaxy
FROM scouting
WHERE scouting.Galaxy = 79
AND scouting.ownerGuild = 'TEST'
ORDER BY scouting.jumpGate DESC,
scouting.astroloc DESC;
我在微软网站上阅读了这个 Greatest N Per Group 问题后生成的代码如下:
Select scouting.astroLoc,
scouting.galaxy,
scouting.jumpGate,
scouting.ownerGuild
From galaxy Inner Join
scouting On galaxy.[galaxy_ID] = scouting.galaxy
Where scouting.ownerGuild = 'SWARM'
AND (scouting.jumpGate) In (Select Top 3 scouting.jumpGate From scouting Where scouting.galaxy = galaxy.[galaxy_ID] Order By scouting.jumpGate Desc)
Order By scouting.astroLoc Desc,
scouting.jumpGate Desc
基本上,这非常接近我想要的。一切似乎都奏效了。然而,有些 GROUPS 并没有在输出中表示出来,即使在观察数据之后,每个组都有一个满足查询约束的记录。顺便说一句,如果我去掉 scouting.ownerGuild = 'SWARM' 约束,它会完美运行(但我需要这个约束)。