2014-12-11 86 views
1

我想指望它的最後狀態表的ID不等於「叫」計數鮮明ID

Table1 ╔═════════╦════════╦══════════╗ ║ q_log_id║ q_id ║ q_status ║ ╠═════════╬════════╬══════════╣ ║ 1 ║ 1 ║ Waiting ║ ║ 2 ║ 1 ║ Waiting ║ ║ 3 ║ 1 ║ Called ║ ║ 4 ║ 2 ║ Waiting ║ ║ 4 ║ 2 ║ Waiting ║ ║ 5 ║ 3 ║ Waiting ║ ║ 5 ║ 3 ║ Waiting ║ ╚═════════╩════════╩══════════╝

因此,計數應該返回2.我不擅長與查詢,所以我需要一些幫助。我嘗試了清楚,但它仍然不適合我。

+0

你說的最後的狀態是指關聯?請解釋爲什麼計數應該返回2.我不確定你想要做什麼? – 2014-12-11 01:29:01

+1

'2''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''')你需要澄清一點。 – paxdiablo 2014-12-11 01:35:08

回答

2
SELECT COUNT(DISTINCT q_id) AS Count 
FROM table1 
WHERE q_id IN (
    SELECT q_id 
    FROM table1 
    GROUP BY q_id 
    HAVING MIN(q_status)<> 'Called' 
) 
2

你可以用窗口解析函數row_number做到這一點,你就可以通過q_log_id做的順序和分區上q_id列 行,最後一排,檢查狀態稱爲

SQL Fiddle

with cte 
as 
(
select * , row_number() over (partition by q_id order by q_log_id desc) as rn 
from table1 
) 
select count(q_id) 
from cte 
where rn =1 
and q_status !='Called' 
+0

謝謝!這實際上做了訣竅。 – ezekiel 2014-12-11 03:18:12

2

如果您不關心'Called'是最終條目,您可以計算'Called'從未出現的q_id值。

SELECT COUNT(1) 
FROM 
(SELECT q_id 
    FROM table1 
    GROUP BY q_id 
    HAVING MAX(CASE WHEN q_status ='Called' THEN 1 END) IS NULL 
) AS v 

這工作,因爲查詢

SELECT q_id,MAX(CASE WHEN q_status='Called' THEN 1 END) 
    FROM table1 
GROUP BY q_id 

給出了一個空當 '叫' 從未有q_id

Q_ID MAX(CASE WHEN Q_STATUS='CALLED' THEN 1 END) 
1  1 
2  (null) 
3  (null)