2016-07-05 59 views
0

我正在使用SQL Server CE數據庫。我有一個學生的費用表所示:如何對行進行分組並選擇top 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 

其中艾爾諾是招生沒有。和日期是存款日期和到期是截至該日期的金額或費用的餘額。

我想獲得每個ErnoStudent的最新記錄。

像:

最新由於信息:

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

是否有任何SQL Server CE查詢這樣做呢?

回答

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

一種選擇是join表背到自己,因爲我不相信row_number支持:

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

這是否會影響性能?實際上,這個表格中有80,000多行和大約20個字段,例如稅費,收費,previousBal等。 – 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); 

然後性能,你想studentfee(errno, date)上的索引。

+0

解析查詢時出錯。 [令牌行號= 3,令牌行偏移= 18,令牌出錯=選擇] – Admin

相關問題