2017-02-24 1 views
0

나는 다음과 같은 한 테이블 :SQL - 그룹화, 유지 최초의 행

name   team   date 
----------------------------------- 
John   A-team  02-5-2014 
Jessica  A-team  08-6-2015 
David  A-team  11-2-2013 
Bill   B-team  12-5-2017 
Nicole  B-team  18-1-2010 
Brandom  B-team  22-9-2012 

내가 않는 쿼리를 만들려고하고 있습니다 : 팀 당

  • 하나의 행을, 그래서 우리는 팀의 Groupe
  • 처음 일어난 행을 선택, 그래서 우리는

는 다음 쿼리는 팀을 부여 (일) 분에 집계되며, 날짜 :

select team, min(date) 
from  my_table 
group by team 

어떻게 이름을 검색 할 수 있습니까? 나는 쿼리를 다음 시도하지만 (그룹화가 아무것도하지 않기 때문에 모든 행은 이제 고유 한대로, 이해) 지금은 모든 행을 얻을 : 당신이 하위로 첫 번째 쿼리를 사용하는 경우

select name, team, min(date) 
from  my_table 
group by team, name 
+1

힌트 : 최소에'join' 사용을 날짜. –

답변

4

는 가입 자체를 수행 - 각 팀의 첫 데이트를 찾으려면 쿼리하십시오.

select t1.* 
from my_table t1 
join 
    (select team, min(date) min_date 
    from my_table 
    group by team) t2 on t1.team = t2.team and t1.date = t2.min_date 

팀의 첫 번째 날짜에 두 개의 이름이 있으면 두 가지 이름을 모두 반환합니다.

당신은 팀 당 한 행, 그 날짜가 두 개의 이름을 가진 경우에도, 다른 GROUP BY, 또는 단순히 NOT EXISTS을 할 수 원하는 경우 :

select t1.* 
from my_table t1 
where not exists (select 1 from my_table t2 
        where t2.team = t1.team 
        and (t2.date < t1.date 
         or (t2.date = t1.date and t2.name < t1.name)) 
+0

같은 테이블에 가입하는 것에 대해 생각하지 않았습니다! 고맙습니다. ' '(그러나 다른'name')과 같은 행이 여러 개있을 경우 어떻게 피할 수 있습니까? –

+1

다른 그룹을 수행하십시오 (예 : min(). – jarlh

+1

@JadeDezo - 그럼 정확히 어떤 이름이 필요한가요? –

0
SELECT min(NAME) 
    ,team 
    ,min(DATE) 
FROM my_table 
GROUP BY team 
+0

나는 그 질문이 표시된 날짜와 같은 줄에있는 이름을 묻고 있다고 생각한다. 그러나 완전히 명확하지는 않습니다. –

+0

@TobySpeight 네가 옳다면, 맞다. 올바른 예가 아니다. – apomene