2012-05-31 202 views
1

如何修改此查询以返回不同的ModelsVideoProcessor列?SQL Server 2005,SELECT DISTINCT查询

SELECT TOP(20) * 
FROM 
    (SELECT 
     [3D_Benchmarks].Id AS BenchmarkId, 
     Manufacturer, Model, Slug, VideoProcessor, 
     FPS, CPU 
    FROM 
     [3D_Benchmarks] 
    JOIN 
     [3D_Slugs] ON [3D_Benchmarks].Id = [3D_Slugs].BenchmarkId) AS tb 
ORDER BY 
    tb.FPS DESC; 

回答

2

根据您的评论提出的新答案。这查找了二十个最高的FPS Model + VideoProcessor。对于其中的每一个,它会选择FPS最高的那一行。

select details.Model 
,  details.VideoProcessor 
,  details.FPS 
,  <add other columns here> 
from (
     select top 20 b.Model 
     ,  VideoProcessor 
     from [3D_Benchmarks] b 
     join [3D_Slugs] s 
     on  b.Id = s.BenchmarkId 
     group by 
       b.Model 
     order by 
       max(b.FPS) desc 
     ) top20 
cross apply 
     (
     select top 1 * 
     from [3D_Benchmarks[ b 
     join [3D_Slugs] s 
     on  b.Id = s.BenchmarkId 
     where b.Model = top20.Model 
       and b.VideoProcessor = top20.VideoProcessor 
     order by 
       b.FPS desc 
     ) details 
+0

谢谢,但这只返回两列。我需要上述所有列与这两个不同的(模型和videoprocessor),我不知道如何结合这个查询与我的查询 –

+1

假设有两行Model ='3000'和VideoProcessor ='AwesomeGpu',一个与100 FPS和一个50 FPS。您想要显示哪个FPS值? – Andomar

+0

我想显示前20最高fps,但与相同videoprocessor不同模式 –