SQL Query限制组内的行

时间:2014-12-17 11:36:37

标签: sql hive hiveql

是否可以编写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

1 个答案:

答案 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标准功能。他们通常还有其他一些方法来完成同样的事情。