2009-08-17 8 views
2

「トップ」の結果が最高の「MPR」を持つ行である場合、1日あたり上位2件の結果を得ようとしています。私のテーブルは次のようになります。「私はTOPキーワードを使用して試してみましたが、これは私だけのトップ2行を与え、そしてIトップXアクセスでSQLを使用している場合

date  symbol MPR 
8/7/2008 AA  0.98 
8/7/2008 AB  0.97 
8/8/2008 AA  0.88 
8/8/2008 AB  0.87 

date  symbol MPR 
8/7/2008 AA  0.98 
8/7/2008 AB  0.97 
8/7/2008 AC  0.96 
... 
8/7/2008 AZ  0.50 
8/8/2008 AA  0.88 
8/8/2008 AB  0.87 
8/8/2008 AC  0.86 
... 
8/8/2008 AZ  0.40 
... 
many other days 

私がする結果セットを希望します上の2行を実行しようとしています、日付はです。

私はMicrosoft Accessを使用しています。私は助けていただければ幸いです!ここで:-)

+0

ここではSQLを実行することなく、SQLを使って人を助けることは限られています。だから、私はヒントを提供する:それは 'トップX'だけでなく、日付で 'グループ'を含むだろう。おもう。 –

答えて

1

http://www.rogersaccesslibrary.com/forum/forum_posts.asp?TID=233

チェックページ5

は、ソリューションです:

 SELECT DISTINCT(symbol), date, MAX(MPR) 
    FROM [TABLE] 
    GROUP BY date,symbol 

...のような

SELECT t1.date, t1.symbol, t1.MPR 
FROM table1 t1 
WHERE t1.MPR IN 
(
    SELECT TOP 2 t2.MPR FROM table1 t2 
    WHERE 
    t2.date = t1.date 
    ORDER BY t2.MPR DESC 
) 
+0

また、この記事をチェックしてください - 使用される構文はMS Accessではありませんが、何をすべきかについての明確なアイデアがありますが http://www.bennadel.com/blog/1114-Selecting-Top-X -From-Each-Group.htm – DmitryK

+0

ありがとう、DmitryK。私はそれをまだ働かせることができませんでしたが、私は試し続けます... – bobbyh

+0

心配しないでください。もしあなたがこれまでに得たものを投稿すれば、私たちは助けてくれるかもしれません... – DmitryK

0

何かがそれ...または記号を行う必要があります、GROUP BYで日付が切り替わりました。ここで

+0

いいえ、MPRの1(MAX)値だけを返します。 Bobbyhは2つの値を返す必要があります。 – DmitryK

+0

右の詳細 - 私は彼の質問を再読した後、私の答えを削除しました:)。しかし、あなたは最初にコメントを書きました。 – SirStan

1

あなたが行く:

 
    SELECT YourTable.DateStamp, YourTable.Symbol, Max(YourTable.MPR) AS MaxOfMBR 
    FROM YourTable 
    GROUP BY YourTable.DateStamp, YourTable.Symbol, YourTable.MPR 
    HAVING YourTable.MPR In (SELECT TOP 2 MPR FROM YourTable T2 WHERE 
    YourTable.DateStamp = T2.DateStamp ORDER BY MPR DESC) 
    ORDER BY YourTable.DateStamp, YourTable.MPR DESC; 

ここにトリックが集計クエリを使用することで、その後、HAVING文の(基本的に「WHERE」集計クエリの)、あなたが引っ張ってサブクエリを使用MPR列の上位2つの値。

私はAccess 2007でクイックDBを作成しましたが、これはうまくいきました。

EDIT:ここでMAXの使用法の説明。特定の日の列のMAX値ではなく、グループのMAXを返しています。したがって、日付ごとに正しいレコード数(2)を取得します。