是否可以编写SQL查询以获取下表中每个日期的前5行。我正在尝试为每个数据创建一个样本集,这将限制我正在尝试处理的数据。
Date Data
1-Jan abc
1-Jan bsd
1-Jan ejk
1-Jan srrf
1-Jan sfj
1-Jan fj
1-Jan rgt
2-Jan jfnv
2-Jan sdjnv
2-Jan zdsj
2-Jan abc
2-Jan bsd
2-Jan ejk
2-Jan srrf
2-Jan sfj
3-Jan fj
3-Jan jdsfh
3-Jan jfnv
3-Jan sdjnv
3-Jan zdsj
3-Jan abc
3-Jan bsd
3-Jan ejk
3-Jan srrf
答案 0 :(得分:3)
标准的SQL方法是使用row_number()
:
select t.*
from (select t.*, row_number() over (partition by date order by date) as seqnum
from table t
) t
where seqnum <= 5;
一个重要的警告:SQL表表示无序集。除非您有另一列指定每个日期内的排序,否则没有“每个日期的前五行”的概念。以上每个日期需要五行。
此外,并非所有数据库都支持row_number()
,即使它是ANSI标准功能。他们通常还有其他一些方法来完成同样的事情。