如何对行进行分组并选择前1

时间:2016-07-05 18:13:17

标签: c# sql .net sql-server-ce

我正在使用SQL Server CE数据库。我有学生费用表,如:

会费

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 是注册号。 日期是存款日期,到期是该日期之前的金额或费用余额。

我希望得到每ErnoStudent的最新记录。

喜欢:

最新到期信息:

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

是否有任何SQL Server CE查询?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你可以试试这个:

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

然后,为了提高性能,您需要studentfee(errno, date)上的索引。

答案 2 :(得分: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