2015-11-16 96 views
0

我有1和表4列查詢組由2列

id, name, key, date 
1,'A' ,'x1','2015-11-11' 
2,'A' ,'x1','2015-11-11' 
3,'B' ,'x2','2015-11-11' 
4,'B' ,'x2','2015-11-11' 
5,'A' ,'x1','2015-11-12' 
6,'A' ,'x1','2015-11-12' 
7,'B' ,'x2','2015-11-12' 
8,'B' ,'x2','2015-11-12' 
9,'D' ,'x3','2015-11-12' 

欲組由[鍵]和[時間]。結果,我想要的是:

2015-11-11    2 

2015-11-12    1 

2:日期2015年11月11日有4行(1,2,3,4),但重複鍵,所以當我們組只有2排。

1:日期2015-11-12有5行(5,6,7,8,9)但有4行(5,6,7,8)與日期2015-11-11重複,我不知道't want calculator =>我們只有1行(9)

對不起我的英文。我希望你能理解我的問題。

請各位幫幫我。我正在使用mysql。

+0

你能解釋一下什麼結果了'2'和'0'是什麼意思? – Mureinik

+0

你可以看到我們有4行。當我按日期分組時,我們有2行2個日期。日期2015-11-11有2排,但我要日期2015-11-12有0排。因爲日期2015-11-12有2行與[key]在2015-11-11 => group中有[key]重複是0行。 –

+0

所以jarlh正確地回答了這個問題? – Strawberry

回答

1
select key, date, (select count(*) from tablename t2 
        where t2.key = t1.key 
        and t2.date = t1.date 
        and not exists (select 1 from tablename t3 
            where t3.key = t2.key 
             and t3.date < t2.date)) 
from tablename t1 

您可以使用相關的子查詢來計算該日期的密鑰。如果該日期的鍵值已經在較早的日期找到,則不要計數。

替代解決方案:

select t1.key, t1.date, count(*) 
from tablename t1 
    LEFT JOIN (select key, min(date) as date from tablename group by key) t2 
    ON t2.key = t1.key and t2.date = t1.date 
group by t1.key, t1.date 
+0

我認爲你的方式很好。我的要求只希望按[日期]分組,但不想通過[鍵]進行復制。你認爲這種方式是最好的嗎?我的數據非常大。 –

+0

如果一個日期有幾個不同的鍵值會怎麼樣?你能不能給你的樣本數據添加更多的值,使它更像真實的數據 - 這可能比現在更復雜一些。不要忘記調整想要的輸出呢! – jarlh

+0

@ChauApple相應地編輯你的問題。 – Strawberry