2014-12-17 2 views
1

SQL 쿼리를 작성하여 아래 테이블의 모든 날짜에 대해 처음 5 개의 행을 가져올 수 있습니까? 내가 처리하려고하는 데이터를 제한 할 각 데이터에 대한 샘플 세트를 작성하려고합니다.그룹 내의 행을 제한하는 SQL 쿼리

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 
+5

어떤 DBMS를 사용하고 있습니까? 실제 쿼리 복잡성은 그에 따라 달라집니다. –

+0

OP의 다른 질문에 내 생각에 그는 mysql을 사용하고 있습니다. –

+0

실제로 하이브에서 수행하려고합니다. 대부분의 SQL을 따라야한다고 생각합니다. –

답변

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 테이블이 정렬되지 않은 집합을 나타냅니다. 각 날짜의 순서를 지정하는 다른 열이 없으면 "각 날짜의 처음 다섯 행"개념이 없습니다. 위는 각 날짜에 대해 임의의 5 개의 행을 사용합니다.

또한 모든 데이터베이스가 ANSI 표준 함수 임에도 불구하고 row_number()을 지원하는 것은 아닙니다. 그들은 보통 같은 일을 성취 할 수있는 다른 방법을 가지고 있습니다.

+0

OP가 이것을 사용하여 데이터를 샘플링했다면 임의의 행은 실제로 한 번만 문제가되지 않을 수 있습니다. D –

+0

@ gordon 감사합니다 .. 하이브에도 .. !! –