2016-07-05 18 views
0

SQL Server CEデータベースを使用しています。行をグループ化してトップ1を選択する方法

会費

Erno | Date  | Due 
--------------------------- 
1  1-Jan-2016 220 
1  1-Mar-2016 200 
1  1-Apr-2016 210 
1  1-May-2016 200 
2  1-Jan-2016 250 
2  1-Feb-2016 300 
2  1-Mar-2016 220 
2  1-Apr-2016 200 
3  1-Jan-2016 300 
3  1-Feb-2016 150 
3  1-May-2016 400 
3  1-Jun-2016 300 

ERNOは登録がノーである私のような学生料金表を持っています。 日付は入金日付で、です。は、その日までの金額または手数料の残高です。

ErnoまたはStudentの最新のレコードを取得します。

同様:

最新により情報:

Erno  Date  Due 
    1  1-May-2016 200 
    2  1-Apr-2016 200 
    3  1-Jun-2016 300 

そうする任意のSQL ServerのCEのクエリがありますか?

select sf.erno, sf.date, sf.due 
from studentfee sf join (
    select erno, max(date) maxdate 
    from studentfee 
    group by erno) t on sf.erno = t.erno and sf.date = t.maxdate 

答えて

0

は、それがパフォーマンスに影響し

select fee.erno,fee.date,fee.due from dues fee 
    join 
    (select erno, max([date]) maxdate 
     from dues group by erno) mx 
    on fee.erno = mx.erno and fee.date = mx.maxdate 
    order by fee.erno 
1

1つのオプションはサポートされている自分自身に戻ってjoinテーブルにありますstudentfee(errno, date)の指数です。

+0

を試してみてください?実際には、このテーブルには、税金、手数料、前のバールなど、80,000行以上のフィールドがあります。 – Admin

+0

@ProgramAdmin - 一般的にパフォーマンスに関しては、それが異なります。あなたは 'erno'と' date'にインデックスを持たせることで恩恵を受けるでしょう。 – sgeddes

0

あなたはこの試みる場合があります:

select sf.* 
from studentfee sf 
where sf.date = (select max(sf2.date) from studentfee sf2 where sf2.errno = sf.errno); 

をそしてパフォーマンスのために、あなたが欲しい、私はrow_numberを信じていないよう

+0

クエリの解析中にエラーが発生しました。 [トークン行番号= 3、トークン行オフセット= 18、トークンエラー中=選択] – Admin

関連する問題