2010-12-30 12 views
1

タイトルが分かりにくい場合は申し訳ありません。私は何をしたいのかよく分かりません。私はこのテーブルを持っているとしましょう。別のフィールドの注文に基づいてトップフィールドを選択してください

test1 | test2 | test3 
1  1  one 
1  2  two 
1  3  three 
1  4  four 
2  10  ten 
2  11  eleven 
2  12  twelve 
3  101  one hundred one 
3  104  one hundred four 
3  107  one hundred seven 

私は順序が値に基づいて行われ、各TEST1、のためにトップTEST3を返します選択クエリを把握しようとしています:test3には、文字列/ varchar型であるのに対しTEST1とTEST2は、int型の列ですtest2で言い換えれば、私はこれを返しますクエリを見つけようとしています:ソリューションは、MS SQL Serverの(2005および2008)とMSアクセスの両方で動作することができれば

test1 | test3 
1  four 
2  twelve 
3  one hundred seven 

それは本当に素晴らしいことだ(2007年と2010)。 SQL Server

+1

代わりに、「1、4」としたいと思っています。 – Quassnoi

+0

ありがとう、修正するために編集しました。 –

答えて

1

SELECT test1, test3 
FROM (
     SELECT test1, test3, ROW_NUMBER() OVER (PARTITION BY test1 ORDER BY test2 DESC) AS rn 
     FROM mytable 
     ) q 
WHERE rn = 1 

または

SELECT test1, test3 
FROM (
     SELECT DISTINCT test1 
     FROM mytable 
     ) md 
CROSS APPLY 
     (
     SELECT TOP 1 
       test3 
     FROM mytable mi 
     WHERE mi.test1 = md.test1 
     ORDER BY 
       mi.test2 DESC 
     ) mt 

これらの各メソッドは、データの分布に応じて、他のより効率的な場合があります。

この記事はあなたに興味がある可能性があります

2

最小公分母の答え。

SELECT yourtable.test1, yourtable.test3 
FROM yourtable 
INNER JOIN 
(
SELECT test1, MAX(test2) AS test_2 
FROM yourtable 
GROUP BY test1 
) t 
ON t.test1 = yourtable.test1 AND t.test_2 = yourtable.test2 
関連する問題