1

次のフィールドを持つテーブルがある場合

ID, SomeFK, SomeTime

各の最新/上位 3 項目 ( に基づくSomeTime) を返すクエリを作成するにはどうすればよいでしょうかSomeFK

したがって、結果は次のようになります

SomeFK    Sometime
0         2012-07-05 
0         2012-07-04 
0         2012-07-03 
1         2012-07-03 
1         2012-07-02 
1         2012-07-01 
2         2012-07-03 
2         2012-07-02 
2         2012-07-01 
....etc....

特定の最新アイテムを返品するのSomeFKは簡単ですが、上記の場合はどうすればよいかわかりません。また、それは非常にシンプルであるべきだと思います!

編集:

申し訳ありませんが、重要な情報を見逃していました。これはSQL2000用なのでROW_NUMBER()使えません!

4

3 に答える 3

9
SELECT SomeFk, SomeTime 
FROM 
    (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY SomeFK ORDER BY sometime desc) rn
    FROM yourtable
    ) v
WHERE rn<=3
ORDER BY somefk, rn

SQL 2000 については、サポートされているプラ​​ットフォームにアップグレードすることをお勧めします。

しかし、あなたが主張するなら。

select *
from yourtable t1
where
    (select COUNT(*)
     from yourtable
     where somefk = t1.somefk
     and sometime>=t1.sometime
    ) <=3
于 2012-08-15T09:19:54.203 に答える
0

私はあなたを正しく理解したと思います。次のように、maxSomeTimeを選択してからグループ化することはできません。

select SomeFK, max(SomeTime) 
from Table
group by SomeFK

あなたが最近何を意味するのか完全にはわからないので、私はここでマークから外れている可能性があります。

于 2012-08-15T09:24:17.267 に答える
0

このリンクに基づいています (元の質問へのコメントとして提供されています)。1つの解決策は次のとおりです。

SELECT DISTINCT ID, SomeFK, SomeTime
FROM SomeTable t1
WHERE ID IN (SELECT TOP 3 ID
               FROM SomeTable t2
              WHERE t2.SomeFK= t1.SomeFK
              ORDER BY SomeTime DESC)
ORDER BY SomeFK, SomeTime DESC

私は今受け入れられた解決策を好みましたが。

于 2012-08-15T09:56:36.187 に答える