如何分组行和 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 是截至该日期的金额或费用余额。
我想获取每个 Erno
或 Student
的最新记录。
喜欢:
最新到期信息:
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
我正在使用 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 是截至该日期的金额或费用余额。
我想获取每个 Erno
或 Student
的最新记录。
喜欢:
最新到期信息:
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