2012-05-31 200 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不同模式 –