2013-01-31 46 views
2

我有一個包含聯繫人嘗試呼叫信息的表。相關領域均低於:SQL - 直到特定結果爲止的列數

Contact  Date  Result 
John Smith 1/8/2013 VM 
John Smith 1/9/2013 VM 
John Smith 1/10/2013 Busy Signal 
John Smith 1/11/2013 Hang Up     <--- Connect 
Jane Smith 1/8/2013 VM 
Jane Smith 1/9/2013 Scheduled Call Back  <--- Connect 
Jane Smith 1/10/2013 VM 
John Doe 1/8/2013 Not Interested   <--- Connect 
Jane Doe 1/8/2013 Busy Signal 
Jane Doe 1/9/2013 Busy Signal 
Jane Doe 1/10/2013 Busy Signal 

我想(而不是之後的任何嘗試的第一個連接),以獲得嘗試次數的計數,直到接觸連接,左右遠,如果嘗試的次數沒有連接已經完成,而且我遇到了麻煩。在這種情況下表示連接的結果將是掛斷,預定回叫和不感興趣。

我想獲得會是什麼樣子:

​​

有沒有辦法做到這一點?任何幫助將不勝感激。

+0

什麼'Result'的值表示連接成功? –

+0

掛斷,定時回撥和不感興趣的是成功的連接 – brianchrystal

+0

@brianchrystal您使用的數據庫是什麼? – Taryn

回答

2

你需要考慮使用GROUP BY

SELECT Contact, COUNT(*) Attempts 
FROM Contacts 
WHERE Result NOT IN ('Hang Up','Scheduled Call Back','Not Interested') 
GROUP BY Contact 

--edit

沒有意識到OP的請求。並且在接受另一個答案之前無法完成此操作...

祝你好運。

+1

仔細看看。 OP通知預期結果模式比同一聯繫人的模式。 –

+0

對於John Doe,是不是會返回0?如果Jane Doe有另一個虛擬機,它會返回3? – brianchrystal

+0

@brianchrystal - 對不起,我感到困惑 - 只是更新了我的答案。祝你好運。 – sgeddes

1

對於MySQL:

SELECT 
    t.Contact, COUNT(*) AS Attempts 
FROM 
    tableX AS t 
    JOIN 
      (SELECT DISTINCT contact 
      FROM tableX 
     ) AS d 
     LEFT JOIN 
      (SELECT contact, 
        MIN(date) AS date 
      FROM tableX 
      WHERE result IN ('Hang Up', 'Scheduled Call Back', 'Not Interested') 
      GROUP BY contact 
     ) AS g 
     ON d.contact = g.contact 
    ON t.contact = d.contact 
    AND t.date <= COALESCE(g.date, '9999-12-31') 
GROUP BY 
    t.contact ;