2017-02-24 64 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 

我想創建一個查詢它的作用:每隊

  • 一排,所以我們獅集團對球隊
  • 選擇該行即發生第一,所以我們正在分鐘聚合(日期)

下面的查詢給球隊和日期:

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

我沒有想過加入同一張桌子!謝謝。如果有多行具有相同的''(但不同的''名稱'),怎麼能避免有多個條目? –

+1

做另一組,使用例如分鐘()。 – jarlh

+1

@JadeDezo - 在這種情況下,究竟哪個名字需要你? –

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

我認爲問題是要求顯示日期的同一行中的名稱。但還不完全清楚。 –

+0

@TobySpeight如果你是對的,那麼是的這不是正確的例子 – apomene