2016-07-05 32 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

相关问题