2016-08-12 63 views
0

下面的表格是我的表:子查詢與多個主鍵

t_task_event 
------------ 
f_date 
f_client_id 
f_task_id 
f_event 

每個任務可以爲多個客戶創建。每個事件都在此表中註冊。正如你所看到的,沒有event_id,這是非常惱人的,看看爲什麼:

我想獲得最後一個事件是「錯誤」的所有任務。我認爲我應該創建一個子查詢以獲取爲客戶註冊的所有最後任務事件。我已經做了這樣的:

SELECT f_task_id, MAX(f_date) AS f_date_max 
FROM t_task_event 
WHERE f_client_id =121 

但是對這個結果,我怎麼可以過濾只保留線,其中該事件是「錯誤」?也許有辦法從這對夫婦創建一種鑰匙(f_task_id,f_date_max)。任何想法?

回答

1
SELECT 
    t.f_task_id 
    ,t.f_client_id 
    ,MAX(CASE WHEN t.f_event = 'Error' THEN t.f_date END) as MaxErrorDate 
    ,MAX(t.f_date) As MaxEventDate 
FROm 
    t_task_event t 
WHERE 
    t.f_client_id = 121 
GROUP BY 
    t.f_task_id 
    ,t.f_client_id 
HAVING 
    MAX(CASE WHEN t.f_event = 'Error' THEN t.f_date END) = MAX(t.f_date) 

你就應該能夠比較有條件聚集的結果找到一個錯誤的最大日期與MAX(date)比較得到的只是這裏的「最新」的記錄是一個錯誤的事件。

+0

謝謝!完美的作品! – cyanat