如何分组行和 select 前 1

How to group rows and select top 1

我正在使用 SQL Server CE 数据库。我有一个学生费用 table 像 :

Table 会费:

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 是注册编号。 Date 是存款日期,Due 是截至该日期的金额或费用余额。

我想获取每个 ErnoStudent 的最新记录。

喜欢:

最新到期信息:

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

是否有任何 SQL 服务器 CE 查询可以这样做?

一个选择是 join 将 table 恢复为自身,因为我认为 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

你可以试试这个:

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

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

尝试

  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